给定一个整数数组,找到和为零的子数组。你的代码应该返回满足要求的子数组的起始位置和结束位置
样例
给出 [-3, 1, 2, -3, 4]
,返回[0, 2]
或者 [1, 3]
.
【由于只要求给出一组结果 所以只要找到第一个子数组即可】
/**
* @param nums: A list of integers
* @return: A list of integers includes the index of the first number
* and the index of the last number
*/
public ArrayList<Integer> subarraySum(int[] nums) {
// write your code here
ArrayList<Integer> res = new ArrayList<Integer>();
int sum;
for(int i=0;i<nums.length;i++){
sum=0;
for(int j=i;j<nums.length;j++){
sum+=nums[j];
if(sum==0){
res.add(i);
res.add(j);
i=nums.length;//找到一组结果后结束所有循环
j=nums.length;
}
}
}
return res;
}
}
【学习的方法】
记录每一位下标和相加到当前位的和的映射, 若和重复出现, 则相应的区间内的和必为0.