顺序扫描数组,并存储每一个位置的sum与k的余数,当余数重复出现时,即产生解;
class Solution {
public:
bool checkSubarraySum(vector<int>& nums, int k) {
unordered_map<int,int> table;
int sum=0;
int flag;
table[0] = -1;
for(int i=0;i<nums.size();i++)
{
sum += nums[i];
if(k==0)
flag=sum;
else
flag= (sum%k);
if(table.find(flag)==table.end())
table[flag]= i;
else
{
if(i-table[flag] > 1)
return true;
}
}
return false;
}
};