😁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