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