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

算法:560.和为k的子数组

题目

链接:leetcode链接

在这里插入图片描述
在这里插入图片描述

思路分析(前缀和)

注意:我们前面讲过滑动窗口可以处理子数组、子串等问题,
但是在这道题目里面注意数据范围 -1000 <= nums[i] <= 1000
nums[i]可正可负,区间的和没有单调性,使用不了滑动窗口

这里带来新的解决方法
这道题目也是要求我们求一段连续区间的和,我们的前缀和算法也能帮助我们做到 [l , r] = dp[r] - dp[l - 1]

所以,我们求区间和为k,也就是,k = sum[r] - sum[l - 1]

抽象来看,存在一个区间的和为k,那么在==[0 , i - 1]==就存在一个前缀和为sum - k
我们只需要去寻找这个sum - k的前缀和即可。

在这里插入图片描述

思考一下,我们真的需要另外去开一个前缀和数组吗?
如果开前缀和数组的话,那也是需要遍历前缀和数组,以每一个下标为终点当sum去找sum - k,时间复杂度依旧是O(N2),这和暴力有啥区别呢?

所以是不需要开前缀和数组的,
我们只需要sum - k的个数,为什么不使用hash表呢?
我们每次算到一个新的前缀和,去hash表中查找sum - k的个数,不就可以解决了嘛

此时的sum前缀和,采用滚动数组的方式,利用一个变量就可以统计所有的前缀和了(这里后续不会使用,所以前缀和并不用存起来,所以并不需要实质地开一个数组)

细节:
(1)我们什么时候把前缀和插入hash表
我们要在[0 , i - 1]中查找hash表,也就是要先查找,再插入,
否则就是在[0,i]中查找
在[0,i]中查找的话,如果k是0的话,就会出现bug,
比如只有一个元素1,插入hash表后
sum - k还是等于1,但是我们要找的是和为0,
在hash里面找到了1,就返回1,但是实际上是没有符合要求的子数组

(2)如果[0,i]的前缀和恰好等于k怎么办呢?
此时我们需要特殊处理,
这种情况下,sum - k等于0,此时的对应的sum - k区间不存在,这种情况要特殊处理一下,
在创建hash表的时候,额外把hash[0] = 1,来提前应对这种情况

代码

int subarraySum(vector<int>& nums, int k) {int sum = 0;int ret = 0;unordered_map<int,int> hash;hash[0]++;for(auto & e:nums){sum += e;int check = sum - k;if(hash.count(check)) ret += hash[check];hash[sum]++;}return ret;}

相关文章:

算法:560.和为k的子数组

题目 链接:leetcode链接 思路分析&#xff08;前缀和&#xff09; 注意&#xff1a;我们前面讲过滑动窗口可以处理子数组、子串等问题&#xff0c; 但是在这道题目里面注意数据范围 -1000 < nums[i] < 1000 nums[i]可正可负&#xff0c;区间的和没有单调性&#xff0c;使…...

C++之list(2)

list(2) list的迭代器 const迭代器 根据我们之前学过的知识&#xff1a; const int*p1;//修饰的是指向的内容 int *const p2;//修饰的是迭代器本身我们写const迭代器&#xff0c;期望的是指向的内容不能修改。 所以更期望写上面p1的形式 const迭代器与普通迭代器的不同点在于…...

React Componet类组件详解(老项目)

React类组件是通过创建class继承React.Component来创建的&#xff0c;是React中用于构建用户界面的重要部分。以下是对React类组件的详细解释&#xff1a; 一、定义与基本结构 类组件使用ES6的class语法定义&#xff0c;并继承自React.Component。它们具有更复杂的功能&#…...

位运算题目-Java实现-LeetCode题解:判断字符是否唯一-丢失的数字-两整数之和-只出现一次的数字 II-消失的两个数字

这里是Themberfue 上一篇文章讲完了常见位运算的技巧以及总结 那么本章则通过五道题来运用这些技巧 判定字符是否唯一 题目解析 本题要求判断给定字符串中的字符是否唯一&#xff0c;也就是每个字符是否只出现一次 算法讲解 本题用哈希表遍历每一个字符也可以解决 如果这题使…...

复合泊松过程

复合泊松过程的均值、方差与特征函数 复合泊松过程的定义 复合泊松过程 ( Y(t) ) 是一种常见的随机过程&#xff0c;通常定义为&#xff1a; Y ( t ) ∑ k 1 N ( t ) X k Y(t) \sum_{k1}^{N(t)} X_k Y(t)k1∑N(t)​Xk​ 其中&#xff1a; ( N(t) ) 是一个强度为 ( \lambd…...

[week1] newstar ctf ezAndroidStudy

本题主要考查对 APK 基本结构的掌握 查看 AndroidManifest.xml 可以发现 activity 只有 Homo 和 MainActivity 我们用 Jadx 打开 work.pangbai.ezandroidstudy.Homo 就可以获得 flag1 打开 resources.arsc/res/value/string.xml 搜索 flag2 即可 按描述到 /layout/activity_ma…...

TCP——Socket

应用进程只借助Socket API发和收但是不关心他是怎么进行传和收的 数据结构 图示Socket连接 捆绑属于隐式捆绑...

OpenStack服务Swift重启失效(已解决)

案例分析Swift重启失效 1. 报错详情 在重新启动 VMware 虚拟机后&#xff0c;我们发现 OpenStack 的 Swift 服务出现了 503 Service Unavailable 错误。经过排查&#xff0c;问题根源在于 Swift 服务所使用的存储挂载是临时挂载&#xff0c;而非永久挂载。 Swift 服务依赖于…...

System.Text.Json类库进行json转化时ValueKind:Object问题

当你的使用的Json库是System.Text.Json&#xff0c;而不是Newtonsoft.Json库的时候&#xff0c;你可能遇到以下问题及其解决办法。通常的解决办法是进行一些对应的配置。此外就需要根据情况使用自定义转换器实现你的需求。以下是通常遇到的使用自定义转换器解决的例子: Q1.当遇…...

免费Excel工作表同类数据合并工具

下载地址&#xff1a;https://pan.quark.cn/s/81b1aeb45e4c 在 Excel 表格里&#xff0c;当我们试图手动将多行同类数据合并为一行时&#xff0c;会遭遇诸多棘手的困难以及繁杂的操作流程。在确定哪些数据属于可合并的同类数据时&#xff0c;单纯依靠人工进行对比&#xff0c;极…...

如何在算家云搭建Video-Infinity(视频生成)

一、模型介绍 Video-Infinity是一个先进的视频生成模型&#xff0c;使用多个 GPU 快速生成长视频&#xff0c;无需额外训练。它能够基于用户提供的文本或图片提示&#xff0c;创造出高质量、多样化的视频内容。 二、模型搭建流程 1.大模型 Video-Infinity 一键使用 基础环境…...

LeetCode搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2 …...

UE5学习笔记24-添加武器弹药

一、给角色的武器添加弹药 1.创建界面&#xff0c;根据笔记23的界面中添加 2.绑定界面控件 UPROPERTY(meta (Bindwidget))UTextBlock* WeaponAmmoAmount;UPROPERTY(meta (Bindwidget))UTextBlock* CarriedAmmoAmount; 3.添加武器类型枚举 3.1创建武器类型枚举头文件 3.2创建文…...

限制游客在wordpress某分类下阅读文章的数量

在WordPress中实现某个分类下的内容限制游客只能阅读前5篇文章&#xff0c;注册用户可以阅读更多文章的功能&#xff0c;可以通过以下步骤来完成&#xff1a; 1. 安装和激活插件 首先&#xff0c;你可以使用一个插件来简化这个过程。一个常用的插件是 “MemberPress” 或 “R…...

Oracle云主机申请和使用教程:从注册到SSH连接的全过程

今天我要和大家分享如何成功申请Oracle云主机,并进行基本的配置和使用。我知道很多同行的朋友在申请Oracle云主机时都遇到了困难&#xff08;疑惑abc错误&#xff09;,可能试了很多次都没有成功。现总结一下这些年来的一些注册流程经验&#xff0c;或许你们也能成功申请到自己的…...

芯知识 | NVH-FLASH语音芯片支持平台做语音—打造音频IC技术革新

随着科技的飞速发展&#xff0c;人们对于电子产品的音频性能要求越来越高。在这种背景下&#xff0c;NVH-FLASH系列语音芯片应运而生&#xff0c;作为音频IC领域的一次重大技术革新&#xff0c;NVH-FLASH系列语音芯片凭借其卓越的性能与灵活的支持平台&#xff0c;正逐步引领着…...

机器学习——解释性AI与可解释性机器学习

解释性AI与可解释性机器学习: 理解机器学习模型背后的逻辑 随着人工智能技术的广泛应用&#xff0c;机器学习模型越来越多地被用于决策过程。然而&#xff0c;这些模型&#xff0c;尤其是深度学习模型&#xff0c;通常被视为“黑箱”&#xff0c;难以理解其背后的决策逻辑。解…...

中国全国省市区县汇总全国省市区json省市区数据2024最新

简介 包含全国省市区县数据,共3465个。 全国总共有23个省、5个自治区、4个直辖市、2个特别行政区。 ——更新于2024年10月16日,从2017年开始,已经更新坚持7年 从刚开始1000个左右的城市json,到现在全国省市区县3465个。 本人感觉应该是目前最完善的~ 每年都在更新中,…...

[Linux#67][IP] 报头详解 | 网络划分 | CIDR无类别 | DHCP动态分配 | NAT转发 | 路由器

目录 一. IP协议头格式 学习任何协议前的两个关键问题 IP 报头与有效载荷分离 分离方法 为什么需要16位总长度 如何交付 二. 网络通信 1.IP地址的划分理念 2. 子网管理 3.网络划分 CIDR&#xff08;无类别域间路由&#xff09; 目的IP & 当前路由器的子网掩码 …...

路由器原理和静态路由配置

一、路由器的工作原理 根据路由表转发数据 接收数据包→查看目的地址→与路由表进行匹配找到转发端口→转发到该端口 二、路由表的形成 它是路由器中维护的路由条目的集合&#xff0c;路由器根据路由表做路径选择&#xff0c;里面记录了网段ip地址和对应下一跳接口的接口号。…...

PMP培训机构怎么选?27年实战经验告诉你答案

在深圳&#xff0c;PMP认证已经成为项目管理从业者提升竞争力的重要途径。但面对市面上众多的PMP培训机构&#xff0c;如何选择一家真正靠谱、通过率高、服务有保障的机构&#xff0c;成了很多人头疼的问题。本文结合真实的市场数据和培训经验&#xff0c;帮你理清选择逻辑。 一…...

Linux服务器遭遇kswapd0挖矿病毒:从CPU爆满到彻底清除的实战指南

1. 初识kswapd0挖矿病毒&#xff1a;一场突如其来的CPU风暴 那天早上我刚打开监控系统&#xff0c;阿里云的告警短信就跳了出来——某台测试服务器的CPU使用率飙到了95%以上。登录服务器执行top命令后&#xff0c;一个陌生的kswapd0进程赫然显示在资源占用榜首。这个本该负责内…...

欧拉角内旋外旋傻傻分不清?一个动画演示让你秒懂(附Python代码)

欧拉角内旋与外旋的视觉化解析&#xff1a;用Python动画破解3D旋转迷思 刚接触3D图形学的开发者&#xff0c;往往会在欧拉角的内旋&#xff08;intrinsic rotation&#xff09;与外旋&#xff08;extrinsic rotation&#xff09;概念前陷入困惑。数学公式的抽象性让这两个本应…...

Win11Debloat:5大模块让Windows 11系统重获新生

Win11Debloat&#xff1a;5大模块让Windows 11系统重获新生 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and customiz…...

基于Arduino-ESP32的嵌入式车牌识别系统:从问题到落地的全流程实现

基于Arduino-ESP32的嵌入式车牌识别系统&#xff1a;从问题到落地的全流程实现 【免费下载链接】arduino-esp32 Arduino core for the ESP32 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32 一、问题发现&#xff1a;嵌入式环境下的车牌识别挑战 智能…...

Go语言标准库context包在微服务调用链中的传播与超时控制

在微服务架构中&#xff0c;服务间的调用链复杂且频繁&#xff0c;如何高效管理调用上下文与超时控制成为关键挑战。Go语言标准库中的context包为此提供了轻量级解决方案&#xff0c;通过传递请求上下文和超时信号&#xff0c;确保系统在分布式环境下的可靠性和可维护性。本文将…...

企业级数据库AI化实践终极指南:SuperDuperDB与SQL Server深度集成

企业级数据库AI化实践终极指南&#xff1a;SuperDuperDB与SQL Server深度集成 【免费下载链接】superduperdb Superduper: End-to-end framework for building custom AI applications and agents. 项目地址: https://gitcode.com/gh_mirrors/su/superduperdb 在当今数据…...

如何用Fuel构建类型安全的GraphQL客户端:终极完整指南

如何用Fuel构建类型安全的GraphQL客户端&#xff1a;终极完整指南 【免费下载链接】fuel The easiest HTTP networking library for Kotlin/Android 项目地址: https://gitcode.com/gh_mirrors/fu/fuel Fuel是Kotlin/Android平台上最简单易用的HTTP网络库&#xff0c;它…...

告别手动标注!用MedCLIP-SAM+BiomedCLIP实现医学图像的“一句话分割”

医学图像智能分割革命&#xff1a;当自然语言指令遇上MedCLIP-SAM 在放射科医生的日常工作中&#xff0c;最耗时的往往不是诊断本身&#xff0c;而是那些繁琐的图像标注工作。想象一下&#xff0c;当一位胸外科医生需要从数百张CT片中定位所有肺结节时&#xff0c;传统方法要求…...

如何用VR-Reversal免费将3D视频转为2D:新手也能轻松探索VR世界

如何用VR-Reversal免费将3D视频转为2D&#xff1a;新手也能轻松探索VR世界 【免费下载链接】VR-reversal VR-Reversal - Player for conversion of 3D video to 2D with optional saving of head tracking data and rendering out of 2D copies. 项目地址: https://gitcode.c…...