Задаче задан несортированный массив, дайте подмножества массива, которые могут дать целевую сумму:
Например:
target = 15
data = {3,4,5,7,1,2,9};
Ожидаемые результаты (обратите внимание, что результаты отсортированы для простоты, а не обязательного требования):
[1, 2, 3, 4, 5]
[1, 2, 3, 9]
[1, 2, 5, 7]
[1, 3, 4, 7]
[1, 5, 9]
[2, 4, 9]
[3, 5, 7]
Вот мой наивный подход к этой проблеме - просто и грубо.
public static void naiveSubset(int[] arr, int target){
int sum=0;
List<Integer> result = new ArrayList<>();
for (int i=0; i< arr.length;i++){
sum =arr[i];
result.add(arr[i]);
for (int j=0;j<arr.length;i++){
if (sum==target){
System.out.println(result);
result.clear();
break;
}
else if (i!=j && sum+arr[j] <= target){
sum+=arr[j];
result.add(arr[j]);
}
}
}
}
По некоторым причинам я не жду результатов. Я попытался просмотреть код, чтобы найти какие-либо проблемы. Но я не мог найти ни одного. пожалуйста, знатоки Алго, укажите мне правильное направление!!
Результаты, которые я получаю (для того же ввода, что и выше)
[3, 3, 3, 3, 3]
[9, 3, 3]