给定一个整数数组,我正在尝试找到最长的子集(幂集),使其总和等于k,使用最少的时间复杂度。
例如,如果inputArr = [1, 2, 8, 1, 1, 7]且k = 10,则输出应为4,因为总和等于10的最长子集是[1, 1, 1, 7]。
编辑:我可能忘记了一个重要细节; 数组的元素都是正数且非零。
我使用了在geeksforgeeks上找到的这个算法:
https://www.geeksforgeeks.org/finding-all-subsets-of-a-given-set-in-java/
代码可以正常工作,但我唯一的问题是执行时间。 我应该在线提交它,但当我提交时,由于超时而终止执行。
int maxSubLength=0;
for (int i = 1; i < (1<<n); i++) //n is the length of inputArr
{
int sum=0, length=0;
for (int j = 0; j < n; j++)
if ((i & (1 << j)) > 0)
{
sum+=inputArr[j];
length++;
if (sum>k)
break;
}
if (sum==k)
maxSubLength=Math.max(maxSubLength, length);
}
有更快的算法吗?我尝试了递归算法,但并没有帮助。