523. Continuous Subarray Sum

这题不难,但很容易出错。
它的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 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;
    }
}

你可能感兴趣的:(523. Continuous Subarray Sum)