我很难在一段时间内解决以下问题。
给定一个整数数组,是否可以选择一组整数的组,使得该组与给定目标相加,并具有以下额外约束:如果数组中的数字是相邻的且相同的价值,他们必须全部被选中,或者没有一个被选中。例如,对于数组{1,2,2,2,5,2},必须选择或不选择中间的所有三个2,所有都作为一个组。 (一个循环可用于查找相同值的范围)。
groupSumClump(0, {8, 2, 2, 1}, 9) → true
groupSumClump(0, {2, 4, 4, 8}, 14) → false
测试案例场景失败:
groupSumClump(0, {2, 4, 4, 8}, 14) → false -->NegativeArraySizeException
groupSumClump(0, {8, 2, 2, 1}, 9) → true false --> X
我真的尽力让它发挥作用,但总是失败了。 请专家解决此问题需要您的帮助 如果你能花几分钟时间研究我的问题并帮助我实现理想的解决方案,我将非常感激和感谢你。
答案 0 :(得分:1)
方法“总结”逻辑真的搞砸了。 它应该看起来像函数“f”这里: Algorithm to find which numbers from a list of size n sum to another number
代码的快速和脏修复:
class Demo {
public static void main(String args[]) {
Demo.groupSumClump(0, new int[] { 2, 4, 4, 8 }, 14);
Demo.groupSumClump(0, new int[] {8, 2, 2, 1}, 9);
}
public static void groupSumClump(int start, int[] nums, int target) {
start = 0;
nums = adjacents(start, nums);
for (int a_number = 0; a_number < nums.length; a_number++) {
System.out.println("Array is " + nums[a_number]);
}
summate(nums, 0, 0, target);
System.out.println(false);
}
public static int[] adjacents(int start, int[] nums) {
int sum = 0;
for (int i = 0; i < nums.length - 1; i++) {
if (nums[i] == nums[i + 1]) {
sum += nums[i] + nums[i + 1];
nums[i] = sum;
nums[i + 1] = 0;
}
}
return nums;
}
static void check(int sum, int target) {
if (sum == target) {
System.out.println(true);
System.exit(0);
}
}
static void summate(int[] numbers, int index, int sum, int target) {
check(sum, target);
if (index == numbers.length) {
return;
}
summate(numbers, index + 1, sum + numbers[index], target);
check(sum, target);
summate(numbers, index + 1, sum, target);
check(sum, target);
}
}