😁523 continuous subarray sum
https://leetcode.com/problems/continuous-subarray-sum/
n^2会超时,其实思路类似2sum,
sum = prefix[j] - prefix[i] + nums[i] = prefix[j] - (prefix[i] - nums[i]),所以要想sum % k == 0,只需要prefix[j]和prefix[i] - nums[i]两部分模k相等就可以
class Solution {
public boolean checkSubarraySum(int[] nums, int k) {
int[] prefixes = new int[nums.length];
prefixes[0] = nums[0];
for (int i = 1; i < nums.length; i++) {
prefixes[i] = prefixes[i - 1] + nums[i];
}
// p[j] - p[i] + nums[i] = k * a
// p[j] = p[i] - nums[i] + k*a
Set<Integer> set = new HashSet<>();
for (int i = 0; i < nums.length; i++) {
if (set.contains((prefixes[i]) % k))
return true;
int key = prefixes[i] - nums[i];
set.add(key % k);
}
return false;
}
}Last updated