(1) sum为0值的初始化;
a[i]+a[i+1]+...+a[j] = nk+q;
a[i]+a[i+1]+...+a[j] + ...+a[n]= mk+q;
两个数字相减去 = (m-n)k.
(2) m[sum]第一记录和为sum的最后一个元素的index1,再次遇到为sum的时候index2.
index2-index1 > 1为元素大于两个。
(3) 考虑k==0的case。
bool checkSubarraySum(vector<int>& nums, int k) {
if(nums.size() == 0)
return false;
map<int,int> m;
m[0]=-1;
int sum = 0;
for(int i=0;i<nums.size();i++) {
sum += nums[i];
if(k)
sum %= k;
if(m.find(sum) != m.end()) {
if(i-m[sum] > 1)
return true;
} else
m[sum] = i;
}
return false;
}