题目
https://leetcode-cn.com/problems/continuous-subarray-sum/
代码和解析(Java)
class Solution {
public boolean checkSubarraySum(int[] nums, int k) {
//前缀和+HashSet+同余定理
//将sum[j]-sum[i-1]=n*k化为sum[j]/n - sum[i-1]/n = k
//因为k为整数,所以sum[j]/n和sum[i-1]/n的余数必须相同,相减后才会为整数
int n = nums.length;
int[] sum = new int[n+1];
for(int i=1;i<=n;i++) sum[i]=sum[i-1]+nums[i-1];
Set<Integer> set = new HashSet<>();
for(int i=2;i<=n;i++){
set.add(sum[i-2]%k);
if(set.contains(sum[i]%k)) return true;
}
return false;
}
}