public class Solution {
public boolean checkSubarraySum(int[] nums, int k) {
int l=nums.length;
//如果区分第一个元素不为k 那么就可以根据sum%k来判断是否返回true
//反之 根据sum%k存在一定的缺陷 6 1 1 1
//因此为了统一 不在根据sum 而都根据余数是否有相等
int modsum=0;
HashMap<Integer,Integer> hashMap=new HashMap<Integer, Integer>();
hashMap.put(0,-1);//之所以要放这个是为了防止出现1 1 k==2的这种情况
for (int i = 0; i <l ; i++) {
modsum+=nums[i];
if(k!=0){ //可能是负数倍数 如果k==0 那么因为不会出现相同的余数 最后返回结果为false
modsum%=k;
}
if (hashMap.get(modsum)!=null){
if (i-hashMap.get(modsum)>1){//不能等于1 因为可能出现23 2 6等类似情况
return true;
}else{
continue;
}
}else{
hashMap.put(modsum,i);
}
}
return false;
}
}