参考链接:
class Solution {
public:
bool checkSubarraySum(vector<int>& nums, int k) {
if(nums.empty()){
return false;
}
//注意map用法,还有就是这个题目用的是余数
//有相同余数的从零到当前位置的两个序列相减就可以去掉余数,得到共有除数啦!
unordered_map<int,int> pos;
int len = nums.size();
int sum = 0 ;
pos[0] = -1;
for(int i = 0 ; i<len ; i++){
sum = sum + nums[i];
if(k) sum = sum %k;
if(pos.count(sum)){
int x = pos[sum];
if(i - x > 1){
return true;
}
}
else{
pos[sum] = i ;
}
}
return false;
}
};