其他分享
首页 > 其他分享> > leetcode 连续的子数组和 中等

leetcode 连续的子数组和 中等

作者:互联网

 

 

前缀和+贪心+取模就行.

见代码

class Solution {
public:
    bool checkSubarraySum(const vector<int>& nums, int k) {
        // preSum[i] % k 与其对应的下标的映射.
        // 贪心: 题目要求子数组次数至少为 2, 所以能够出现的长度越长越好, 即只存 第一次出现的映射就行
        unordered_map<int, int> map;
        int preSum = 0;
        map[0] = -1;        // 初始化
        for(int i = 0; i < nums.size(); ++ i) {
            preSum += nums[i];
            if(map.find(preSum % k) != map.end() && i - map[preSum % k] > 1) {
                return true;
            }
            if(map.find(preSum % k) == map.end()) map[preSum % k] = i;
        }
        return false;
    }
};

 

标签:map,return,nums,int,中等,find,数组,preSum,leetcode
来源: https://www.cnblogs.com/rookie-acmer/p/15314411.html