1. 程式人生 > >連續子數組和 Continuous Subarray Sum

連續子數組和 Continuous Subarray Sum

tin .get ole 分享圖片 lse 數組 得到 info ron

2018-10-03 01:12:42

問題描述:

技術分享圖片

問題求解:

本題本質上其實是一個preSum問題的變種,每次求preSum % k,並將之保存到map中,如果之後再次得到相同的余數,則表示這兩者之間的和是k的整數倍。

需要註意的有兩點:

1)map初始化的時候需要加入(0, -1)

2)如果k == 0,那麽直接將sum加入到map中即可

    public boolean checkSubarraySum(int[] nums, int k) {
        if (nums.length == 0) return false;
        Map<Integer, Integer> map = new HashMap<>();
        map.put(0, -1);
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
            if (k != 0) sum %= k;
            Integer tmp = map.get(sum);
            if (tmp != null && i - tmp >= 2) return true;
            if (tmp == null) map.put(sum, i);
        }
        return false;
    }

連續子數組和 Continuous Subarray Sum