題目:
給定一個整數數組,找到和爲零的子數組。你的代碼應該返回滿足要求的子數組的起始位置和結束位置
樣例:
給出 [-3, 1, 2, -3, 4]
,返回[0,
2]
或者 [1, 3]
.
代碼:
class Solution {
public:
/**
* @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
*/
vector<int> subarraySum(vector<int> nums){
// write your code here
vector<int> ret;
int n;
if((n=nums.size())==0)
return ret;
map<int,int> mark;
mark[0]=-1;
int sum=0;
for(int i=0;i<n;++i){
sum+=nums[i];
if(mark.count(sum)){
ret.push_back(mark[sum]+1);
ret.push_back(i);
return ret;
}
mark[sum]=i;
}
return ret;
}
};
思想:這個題一開始不太會做,在網上看了別人的之後會做得。大體思路就是利用了一個map來記錄從第一個元素到當前元素的和以及下標,如果這之後的元素和爲0,sum不變,返回下標即可。