博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Subarray Sum Equals K
阅读量:5973 次
发布时间:2019-06-19

本文共 1179 字,大约阅读时间需要 3 分钟。

Subarray Sum Equals K

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 = 2Output: 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].

分析

这道题开始并不容易想,因为不是典型的那种可以用DP解决的子数组类型的题。由于求的是子subarray和为K的总个数,只能想办法找出所有和为K的子数组,然后返回个数就可以。

那么关键点就是怎么找出所有和为K的子数组,bruce force的方法显然不可行。突破点就是我们可以把任意子数组的里面所有元素的和转化为两个子数组累计元素和之差,当然这个两个子数组指的是头元素是大数组第一个元素的连续子数组。这样一来,我们用一个HashMap来记录每个子数组元素和对应的次数就可以了。

我们从头开始读数组,记录下累计元素之和,把每次的和存在HashMap中,通过HashMap在每次读的过程中我们可以找出是否前面存在一个数组与当前数组之差等于K,这样我们就可以找出所以子数组之和为K的情况。由于存在前面子数组和相同的情况,我们用HashMap记录每个和对应的次数就可以了。

复杂度

time: O(n), space: O(n)

代码

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

转载地址:http://jydox.baihongyu.com/

你可能感兴趣的文章
Shell之Sed常用用法
查看>>
Centos下基于Hadoop安装Spark(分布式)
查看>>
mysql开启binlog
查看>>
设置Eclipse编码方式
查看>>
分布式系统唯一ID生成方案汇总【转】
查看>>
并查集hdu1232
查看>>
Mysql 监视工具
查看>>
Linux Namespace系列(09):利用Namespace创建一个简单可用的容器
查看>>
博客搬家了
查看>>
Python中使用ElementTree解析xml
查看>>
jquery 操作iframe、frameset
查看>>
解决vim中不能使用小键盘
查看>>
Eclipse Java @Override 报错
查看>>
linux的日志服务器关于屏蔽一些关键字的方法
查看>>
mysql多实例实例化数据库
查看>>
javascript 操作DOM元素样式
查看>>
HBase 笔记3
查看>>
【Linux】Linux 在线安装yum
查看>>
Atom 编辑器系列视频课程
查看>>
[原][osgearth]osgearthviewer读取earth文件,代码解析(earth文件读取的一帧)
查看>>