138.子數組之和

題目:

給定一個整數數組,找到和爲零的子數組。你的代碼應該返回滿足要求的子數組的起始位置和結束位置


樣例:

給出 [-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不變,返回下標即可。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章