这题不难,但很容易出错。
它的corner case是k等于0的时候。
当k等于0的时候, 不能做 mod 了,要处理这种case
还有一个corner case是什么时候把prefix sum放进去。
应该是在每个i的结尾放进去(判断contains之后)
在第一个i时结尾放0进去,代表没有数时和为0.
class Solution {
public boolean checkSubarraySum(int[] nums, int k) {
int N = nums.length;
Set<Integer> appeared = new HashSet<>();
int sum = 0;
int prev = 0;
for (int i = 0; i < N; i++) {
sum += nums[i];
if (k != 0) sum %= k;
if (i != 0) {
if (appeared.contains(sum)) return true;
}
appeared.add(prev);
prev = sum;
}
return false;
}
}
网友评论