题目描述:
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;
}
};