1. 程式人生 > 其它 >#力扣 LeetCode560. 和為K的子陣列 @FDDLC

#力扣 LeetCode560. 和為K的子陣列 @FDDLC

技術標籤:演算法&資料結構

題目描述:

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;
    }
}