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

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

解题:我们在看path sum的其他问题之前,需要看看一下这个题,这题要求有多少subarrays sum 等于给定的值k。解法就和two sum的解法类似,用hashmap 把pre sum存起来,遍历的时候用当前sum 减去 k,如果hashmap里面有sum - k,说明两个点之间数值和为k。

class Solution {
    public int subarraySum(int[] nums, int k) {
        int sum = 0, result = 0;
        Map<Integer, Integer> preSum = new HashMap<>();
        preSum.put(0, 1);

        for (int i = 0; i < nums.length; i++) {
            //当前index数组的sum
            sum += nums[i];
            //如果当前sum减去k的值在哈西表出现过,说明当前sum的位置到之前sum之间的和为k
            if (preSum.containsKey(sum - k)) {
                result += preSum.get(sum - k);
            }
            //把当前sum放入哈西表的key,value为出现次数。
            preSum.put(sum, preSum.getOrDefault(sum, 0) + 1);
        }       
        return result;
    }
}

results matching ""

    No results matching ""