lintcode 138. Subarray Sum

image.png

解法一:
暴力搜索,遍历两个坐标的可能性,O(n^2);

解法二:
类似于暴力搜索,但是!!记录的是累加和,当两个位置的累加和一样的时候,说明这一段为0;由于寻找两个数是否一样,还是需要o(n^2)的时间。

解法三: 哈希表!!!
用hash存储,每次加入的时候,检查下是否存在一样的

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
        unordered_map<int, int> umap;
        int cur_sum = 0;
        vector<int> result;
        for(int i = 0; i < nums.size(); i++){
            cur_sum += nums[i];
            if(cur_sum == 0){
                result.push_back(0);
                result.push_back(i);
                break;
            }
            if(umap.find(cur_sum) == umap.end()){
                umap[cur_sum] = i;
            }
            else{
                result.push_back(umap.find(cur_sum)->second + 1);
                result.push_back(i);
                break;
            }
        }
        return result;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 原题 给定一个整数数组,找到和为零的子数组。你的代码应该返回满足要求的子数组的起始位置和结束位置。 给出[-3, ...
    Jason_Yuan阅读 416评论 0 1
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,992评论 0 33
  • 一个和本文没什么关系的段子: 说,大张伟小时候嘴特贫,经常被学校的混混们按在地上摩擦。每次大老师都是被打到讨饶:疼...
    松竹大船调阅读 575评论 0 3
  • 有很多平庸的人,包括我在内,都被称呼为“思想上的巨人,行动上的矮子”。这一类人的特点是爱常立flag,而没有真正做...
    终身学习者小张阅读 504评论 0 2
  • 一颗颗 掉落在耳涡里 光也变得孱慢 路灯洒下橘色的光 向地面 而 低矮的树叶 也泛着 金边
    soft_like_sea阅读 229评论 0 0

友情链接更多精彩内容