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

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

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:
The length of the array is in range [1, 20,000].
The range of numbers in the array is [-1000, 1000] and the range of the integer k is [-1e7, 1e7].

我的想法

一开始题目没理解对,以为满足了等于k再往后的数组就不算了,其实是要算的。这样的话brute force的时间复杂度就到了n2

但是感觉这道题只能枚举,不知如何优化

class Solution {
public int subarraySum(int[] nums, int k) {
if(nums == null || nums.length == 0) {
return 0; } int res = 0; for(int i = 0; i < nums.length; i++) {
int sum = nums[i]; if(sum == k) {
res++; //continue; } for(int j = i + 1; j < nums.length; j++) {
sum += nums[j]; if(sum == k) {
res++; //break; } if(sum == 0) {
//break; } } } return res; }}

解答

jiuzhang solution: HashMap

很聪明的方法
用HashMap存前缀,两个前缀之差就等于两点之间的元素和

class Solution {
public int subarraySum(int[] nums, int k) {
Map
mp = new HashMap
(); for (int i = 1; i < nums.length; ++i) {
nums[i] += nums[i - 1]; } int ans = 0, tmp = 0; mp.put (0, 1); for (int i = 0; i < nums.length; ++i) {
if (mp.containsKey (nums[i] - k)) ans += mp.get (nums[i] - k); tmp = mp.containsKey (nums[i]) ? mp.get (nums[i]) + 1 : 1; mp.put (nums[i], tmp); } return ans; }}

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

你可能感兴趣的文章
爬虫采集 通用正则表达式
查看>>
织梦学习 变量的运用 添加新变量 删除新变量 添加上传视频mp4
查看>>
CocosCreator+VS2017提示“要求的 VS 版本:[2013, 2015, 2017]”解决办法 无法找到 v140_xp 的生成工具
查看>>
助学贷款系统导入预申请时问题解决办法汇总
查看>>
FTP连接阿里云不能获得列表目录等功能,能连接,21端口也打开了。原因FTP是双向的,阿里云入出方向安全组规则必须添加本地随机端口
查看>>
读书程序标准化建模--高效阅读学习,越学越有劲/趣
查看>>
不翻qiang搞定Android Studio Google库加载不下来的问题 打包生成apk android studio 3.2打灰机程序源码带详细注释
查看>>
仿照利用android系统源码资源文件,修改SeekBar颜色 前景与背景
查看>>
printf及String.format格式化测试
查看>>
android java 经典字符模式通信接收处理,标准modbus通讯协议接收处理提取数据
查看>>
10055自动进刀水钻机android蓝牙2.0SSP项目源码结构使用说明【版本更新、自动连接、控件批量处理、接收解析】
查看>>
Android Studio导入项目时常见问题的解决汇总,Eclipse项目转为Android Studio项目步骤报错万能解决方法汇总
查看>>
Widget.Material.Light.ProgressBar.Horizontal" (10302b8) is not a Drawable (color or path)错误解决
查看>>
解决java中文乱码,编码识别测试,汇总
查看>>
android定时,延时,倒计时源码
查看>>
Eclipse导入项目时常见问题解决汇总, Android Studio转为Eclipse项目问题汇总
查看>>
com.android.dex.DexIndexOverflowException
查看>>
AndroidStudio一个工程内查看多个项目的实现
查看>>
Gradle Build速度加快终极方法
查看>>
Could not find class 'com.umeng.analytics.d' 解决的方案分享
查看>>