#力扣 LeetCode560. 和為K的子陣列 @FDDLC
阿新 • • 發佈:2021-01-05
技術標籤:演算法&資料結構
題目描述:
https://leetcode-cn.com/problems/subarray-sum-equals-k/
Java程式碼:
import java.util.HashMap; class Solution { //陣列的長度為 [1, 20,000],陣列中元素的範圍是 [-1000, 1000] ,且整數 k 的範圍是 [-1e7, 1e7] public int subarraySum(int[] nums, int k) { //注:[1,1,1,1],k=2,answer=3!!! int answer=0; for(int i=1;i<nums.length;i++)nums[i]+=nums[i-1]; HashMap<Integer,Integer> register=new HashMap<>(); for(int num:nums){ //[2,3,0,4,6,20],k=10 if(num==k)answer++; Integer integer=register.get(num); if(integer!=null)answer+=integer; integer=register.get(num+k); if(integer==null)integer=0; register.put(num+k,++integer); } return answer; } }
Java程式碼二:
import java.util.HashMap; class Solution { //陣列的長度為 [1, 20,000],陣列中元素的範圍是 [-1000, 1000] ,且整數 k 的範圍是 [-1e7, 1e7] public int subarraySum(int[] nums, int k) { //注:[1,1,1,1],k=2,answer=3!!! int answer=0,sn=0; HashMap<Integer,Integer> register=new HashMap<>(); register.put(k,1); for(int num:nums){ //[2,3,0,4,6,20],k=10 sn+=num; answer+=register.getOrDefault(sn,0); register.put(sn+k,register.getOrDefault(sn+k,0)+1); } return answer; } }