這題不難溅蛉,但很容易出錯公浪。
它的corner case是k等于0的時候。
當(dāng)k等于0的時候船侧, 不能做 mod 了欠气,要處理這種case
還有一個corner case是什么時候把prefix sum放進(jìn)去。
應(yīng)該是在每個i的結(jié)尾放進(jìn)去(判斷contains之后)
在第一個i時結(jié)尾放0進(jìn)去镜撩,代表沒有數(shù)時和為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;
}
}