问题描述:
样例:给出[-3, 1, 2, -3, 4],返回[0, 2] 或者 [1, 3].
算法描述:关键还是循环遍历数组,定义起始和终止位置,连续求和
public static ArrayList<Integer> subarraySum(int[] nums) {
//定义一个集合保存区间
ArrayList<Integer> result=new ArrayList<Integer>();
if(nums==null||nums.length==0){
return result;
}
int begin=0;//起始位置
int end=0;//末位;
int sum=0;//和值
for(int i=0;i<nums.length;i++){
//定义起始终止位置
begin=i;
end=i;
//如果数组还没遍历完且和值不为0
while((end<nums.length)&&(sum!=0)){
sum+=nums[end];
end++;
}
//一旦和值为0,保存区间的起始和终止位置,并跳出循环
//如果没有break,result能保存所有区间;
if(sum==0){
result.add(begin);
result.add(end);
break;
}else{
//在当前遍历中,遍历到最后一个数了,还没能使和值为0,则将sum赋值为0,重新开始下一趟遍历
sum=0;
}
}
return result;
}