523. 连续的子数组和
直接用前缀和和$k$取余来记录前面k的余数的位置,判断是否大于2即可
bool checkSubarraySum(vector<int>& nums, int k) {
unordered_map<int, int> m;
int n = nums.size();
int pre = 0;
m[0] = -1;
for (int i; i < n; ++i) {
int x = nums[i];
pre = (x + pre) % k;
if(m.count(pre)) {
if(i - m[pre] >= 2) return true;
}else m[pre] = i;
}
return false;
}