当前位置: 首页 > news >正文

leetcode 560.和为k的子数组

思路一:可以仿照数据结构黑皮书中第一章演示最大子段和的做法,我们可以暴力求解,然后在暴力做法的基础上,边计算边判断,降低时间复杂度至O(n2).

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

思路二:前缀和.对于子序列问题,一般来说就会用到滑动窗口的双指针,以及前缀和这种思想.这里也是,前缀和对于子序列求解的本质其实就是对于各个区间相加减得到全部子区间的过程.

class Solution {public int subarraySum(int[] nums, int k) {int[]qian=new int[nums.length+1];for(int i=1;i<=nums.length;i++){qian[i]=qian[i-1]+nums[i-1];}int count=0;for(int i=0;i<nums.length;i++){for(int j=i+1;j<=nums.length;j++){if(qian[j]-qian[i]==k)count++;}}return count;}
}

思路三:前缀和+哈希表

实际上就是这个意思:a+b=c,那么我们可以推知c-b=a.这个道理用在哈希表查询上.

我们求出来前缀和之后,其实也就是变相知道了某个区间的和,就如上面所说的,如果两个区间相减为k,那么我们只需要求出该前缀和-k存不存在有那么一个区间是刚刚成立的那个式子的值.逆向思维.

哈希表的主要目的就是存储区间和的次数.

注意需要将0,1这一对先赋值进去.否则当数组中出现0元素的时候就不行了.

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【hive和spark】hive和spark数据lineage血缘实现思路
  • 只强的Java学习之路8-5
  • 【L1.第二章】如何搭建 Appium 环境与配置
  • 【STM32 FreeRTOS】任务
  • 227还原实战(五)控制流专题
  • 抽象代数精解【6】
  • RabbitMQ使用Jackson进行消息队列的对象传输
  • CSP 2019 第四题: 加工零件
  • 量产工具——复习及改进(后附百问网课程视频链接)
  • 数字信号处理2: 离散信号与系统的频谱分析
  • 解决客户访问超时1s问题
  • C#如何对某个词在字符串中出现的次数进⾏计数(LINQ)
  • YOLOX修改检测框、标签文字的粗细大小
  • 产业链分析指南:产业链分析的七个步骤!
  • <数据集>电梯内人车识别数据集<目标检测>
  • ----------
  • python3.6+scrapy+mysql 爬虫实战
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • Bytom交易说明(账户管理模式)
  • C++入门教程(10):for 语句
  • Github访问慢解决办法
  • Js基础知识(四) - js运行原理与机制
  • JS题目及答案整理
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Lsb图片隐写
  • webpack+react项目初体验——记录我的webpack环境配置
  • 分享几个不错的工具
  • 入门到放弃node系列之Hello Word篇
  • 树莓派 - 使用须知
  • 通过git安装npm私有模块
  • 网络应用优化——时延与带宽
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 消息队列系列二(IOT中消息队列的应用)
  • 再谈express与koa的对比
  • 昨天1024程序员节,我故意写了个死循环~
  • ​queue --- 一个同步的队列类​
  • (1)无线电失控保护(二)
  • (2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (Java入门)学生管理系统
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (六)Hibernate的二级缓存
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (十)T检验-第一部分
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .Net Core 微服务之Consul(三)-KV存储分布式锁
  • .net web项目 调用webService
  • .NET 分布式技术比较
  • .NET 中 GetProcess 相关方法的性能