1. 程式人生 > 其它 >LeetCode 560. Subarray Sum Equals K

LeetCode 560. Subarray Sum Equals K

LeetCode560. Subarray Sum Equals K (和為 K 的子陣列)

題目

連結

https://leetcode-cn.com/problems/subarray-sum-equals-k/

問題描述

給你一個整數陣列 nums 和一個整數 k ,請你統計並返回該陣列中和為 k 的連續子陣列的個數。

示例

輸入:nums = [1,1,1], k = 2
輸出:2

提示

1 <= nums.length <= 2 * 104
-1000 <= nums[i] <= 1000
-107 <= k <= 107

思路

與304類似,也是字首和思路,把每個數的字首和存起來。同時也要計算前面有沒有符合差值為k的區間,考慮到值有正負,這裡採用hashmap存放,分別為字首和值,和該值的數量,遍歷結束即可得到答案。

需要注意的有,最開始時要把數對<0,1>加入,用於處理包含開頭的數。

複雜度分析

時間複雜度 O(n)
空間複雜度 O(n)

程式碼

Java

    public int subarraySum(int[] nums, int k) {
        int ans = 0;
        HashMap<Integer, Integer> map = new HashMap<>();
        map.put(0,1);
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
            int need = sum - k;
            if (map.containsKey(need)) {
                ans += map.get(need);
            }
            map.put(sum, map.getOrDefault(sum, 0) + 1);
        }

        return ans;
    }