描述
给定一个整数数组,找到和为零的子数组。你的代码应该返回满足要求的子数组的起始位置和结束位置
样例
样例 1:
输入: [-3, 1, 2, -3, 4]
输出: [0,2] 或 [1,3]
样例解释: 返回任意一段和为0的区间即可。
样例 2:
输入: [-3, 1, -4, 2, -3, 4]
输出: [1,5]
注意事项
至少有一个子数组的和为 0
代码部分
public class Solution {
/**
* @param nums: A list of integers
*/
public List<Integer> subarraySum(int[] nums) {
// write your code here
Map<Integer,Integer> map=new HashMap<Integer,Integer>();
List<Integer> res=new ArrayList<Integer>();
map.put(0,-1);//这个-1是指坐标
int sum=0;
for(int i=0;i<nums.length;i++){
sum+=nums[i];
if(map.containsKey(sum)){
res.add(map.get(sum)+1);
res.add(i);
break;
}
map.put(sum,i);
}
return res;
}
}
补充说明
这里有一些map的方法第一次用到。