Учитывая массив целых чисел, я пытаюсь найти самое длинное подмножество (powerset) с суммой, равной 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);
}
Есть ли более быстрый алгоритм? Пробовал рекурсивно - не помогло.