groupsumClump问题

时间:2011-05-17 08:36:02

标签: java

我很难在一段时间内解决以下问题。

给定一个整数数组,是否可以选择一组整数的组,使得该组与给定目标相加,并具有以下额外约束:如果数组中的数字是相邻的且相同的价值,他们必须全部被选中,或者没有一个被选中。例如,对于数组{1,2,2,2,5,2},必须选择或不选择中间的所有三个2,所有都作为一个组。 (一个循环可用于查找相同值的范围)。

  groupSumClump(0, {8, 2, 2, 1}, 9) → true      
  groupSumClump(0, {2, 4, 4, 8}, 14) → false     

代码位于http://ideone.com/Udk5q

测试案例场景失败:

 groupSumClump(0, {2, 4, 4, 8}, 14) → false -->NegativeArraySizeException
 groupSumClump(0, {8, 2, 2, 1}, 9) → true false --> X

我真的尽力让它发挥作用,但总是失败了。 请专家解决此问题需要您的帮助 如果你能花几分钟时间研究我的问题并帮助我实现理想的解决方案,我将非常感激和感谢你。

1 个答案:

答案 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);
}
}