0

我正在尝试解决 Lintcode 设置的问题:给定一个整数数组,找到总和为零的子数组的开始和结束索引。例如:给定一个数组 [-3, 1, 2, -3, 4],返回 [0, 2] 或 [1, 3]。

下面的代码不是这个问题的最佳答案,它只是我第一次尝试解决这个问题,但我不知道它为什么会导致 Java stackoverflow 错误并想弄清楚,所以我决定在这里发布。我还在 Eclipse IDE 中运行代码,它给了我正确的答案。

我使用递归调用实现了这个,也许这是导致堆栈溢出问题的原因,我不确定。

提前感谢您的帮助!

public ArrayList<Integer> subarraySum(int[] nums) {
    ArrayList<Integer> list = new ArrayList<Integer>();
    if (nums == null || nums.length == 0) return list;
    if (nums[0] == 0){
        list.add(0);
        list.add(0);
        return list;
    }
    for (int i=0;i<nums.length; i++){

        calculateSum(i+1, nums, 0-nums[i], list);
        if (list.size() != 0){
            list.add(0, i);
            break;
        }
    }

    return list;
}

private void calculateSum(int start, int[] nums, int target, ArrayList<Integer> list){
    if (start == (nums.length - 1)){
        if (target != nums[start]){
            return;
        }else{
            list.add(start);
            return;
        }
    }else{
        if (target == nums[start]){
            list.add(start);
            return;
        }else{
            calculateSum(start+1, nums, target-nums[start], list);
        }
    }
}
4

0 回答 0