LeetCode 560. Subarray Sum Equals K
阿新 • • 發佈:2022-03-05
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; }