LeetCode:M-560. Subarray Sum Equals K

LeetCode鏈接


Given an array of integers and an integer k, you need to find the total number of continuous subarrays whose sum equals to k.

Example 1:

Input:nums = [1,1,1], k = 2
Output: 2

Note:

  1. The length of the array is in range [1, 20,000].
  2. The range of numbers in the array is [-1000, 1000] and the range of the integer k is [-1e7, 1e7].

1、假設需要求sum[i,j]是否和爲k

2、則sum[i,j] = sum[0,j] - sum[0, i-1]

3、可以在遍歷過程中存儲sum[0, i-1]的值,若檔期值sum-k的值之前出現過,合法子串增加sum-k出現的次數個


class Solution {
    public int subarraySum(int[] nums, int k) {
        
        if(nums==null || nums.length==0)
            return 0;
        
        int n = nums.length;
        //<nums[i]前的所有數字和,和相同的個數>
        Map<Integer, Integer> preSum = new HashMap<Integer, Integer>();
        int sum=0;
        preSum.put(0,1);
        int res=0;
        for(int i=0; i<n; i++){
            sum+=nums[i];
            if(preSum.containsKey(sum-k)){
                res+=preSum.get(sum-k);
            }
            preSum.put(sum, preSum.getOrDefault(sum, 0)+1);
        }
        
        return res;
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章