523. Continuous Subarray Sum

来源:互联网 发布:h5 cms 开源 编辑:程序博客网 时间:2024/05/16 07:54

题目描述:
Given a list of non-negative numbers and a target integer k, write a function to check if the array has a continuous subarray of size at least 2 that sums up to the multiple of k, that is, sums up to n*k where n is also an integer.
题目要求给一个由非负正数组成的数组和一个数k,要求在数组中找一段长度≥2的序列使其和是k的整数倍。
首先处理k=0的情况,接着用HashMap保存sum对k取余数,如果前序有余数也为sum % k的位置,那么就存在连续子数组和为k的倍数。
代码如下:

class Solution {public:    bool checkSubarraySum(vector<int>& nums, int k) {        unordered_map<int, int> pos;        if (nums.size()) {            int sum = 0; pos[0] = -1;            for (int i = 0; i < nums.size(); i++) {                sum += nums[i];                if (k) sum %= k;                if (pos.count(sum)) {                    int x = pos[sum];                    if (i - x > 1) return true;                } else {                    pos[sum] = i;                    }            }        }        return false;    }};
原创粉丝点击