LeetCode-Subarray Sum Equals K

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Apple_hzc/article/details/83346611

一、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.

题目大意:给定一个数组和一个k,找出数组中所有连续元素的和等于k的组合数。

Example 1:

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

二、Analyzation

在这里介绍时间复杂度和空间复杂度最优化的方法。定义一个hashmap,其中key放的是从0到当前索引所有元素的和sum,value是对应的sum所出现的次数,为什么要这么做呢?

假设当前遍历到的数组下标为j,则:

sum[0...j] - sum[0...x] = sum[x + 1...j];//其中k = sum[x + 1...j]

我们从0开始遍历数组,不断累加sum,并检查map中是否包含值为sum - k的key,如果包含,说明在这之前一定存在一个连续的子序列的值等于k,这时count加一,并将当前的sum放入map中(如果已存在则更新value加一),最后返回count即为所求。


三、Accepted code

class Solution {
    public int subarraySum(int[] nums, int k) {
        if (nums == null || nums.length == 0) {
            return 0;
        }
        int sum = 0, count = 0;
        Map<Integer, Integer> map = new HashMap<>();
        map.put(0, 1);
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
            if (map.containsKey(sum - k)) {
                count += map.get(sum - k);
            }
            map.put(sum, map.getOrDefault(sum, 0) + 1);
        }
        return count;
    }
}

猜你喜欢

转载自blog.csdn.net/Apple_hzc/article/details/83346611
今日推荐