【前缀和】560.和为 K 的子数组

Halo,这里是Ppeua。平时主要更新C++,数据结构算法,Linux与ROS…感兴趣就关注我bua!
和为K的子数组
- 题目:
- 示例:
- 题解:
- 解法一:
- 解法二:
题目:

示例:

题解:
解法一:
暴力解法:我们很容易想到通过两个for循环去遍历数组中所有和的可能,之后来判断有几个满足K.他的代码十分的简单,所以这里直接给出.
class Solution {
public:int subarraySum(vector<int>& nums, int k) {int count = 0;for (int start = 0; start < nums.size(); ++start) {int sum = 0;for (int end = start; end >= 0; --end) {sum += nums[end];if (sum == k) {count++;}}}return count;}
};
这里通过一个start与end来控制子数组区间.若为K则计数++.
我们仔细观察这样的做法.可以很容易的发现,**我们可以通过前缀和来解决两层循环的问题.**于是就有了解法二:利用前缀和来解决此类问题.
解法二:
不熟悉前缀和的uu们可以看看这篇文章:[前缀和]((138条消息) 【高精度加减乘除法、一维二维前缀和&&差分】思路讲解及代码实现_ppeua的博客-CSDN博客)
这里就直接开始推导了,这里利用的是一维的前缀和方法.
定义:**pre[i]**表示从0~i的所有数组元素之和.
那么根据前缀和的定义:j~i区间内的元素之和可以表示为:pre[i]-pre[j-1],我们要判断的就是这个结果能不能等于K.
所以现在的求解就简化为下面这个式子:

我们对两边式子进行简单的数学推导可以得到.

这样我们可以通过一个hash来存储值,之后只要验证当前遍历的这个前缀和-k的结果是否出现在hash当中.若出现则+上其出现的次数.
代码较为简单:
class Solution {
public:int subarraySum(vector<int>& nums, int k) {for(int i=1;i<nums.size();i++){nums[i]+=nums[i-1];}unordered_map<int,int>mp;mp[0]=1;int res=0;for(int i=0;i<nums.size();i++){if(mp.find(nums[i]-k)!=mp.end()){res+=mp[nums[i]-k];}mp[nums[i]]++;}return res;}
};
有两个很重点的问题:
-
为什么mp[0]=1?
为了应对 nums[0] +nums[1] + … + nums[i] == k,也就是从下标 0 累加到下标 i刚好满足的情况.
举个例子:k为6
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d76gHMzW-1690721194136)(9feab2bfaa7a4eeaaf2882827c8466d.jpg)]](https://img-blog.csdnimg.cn/981f5e0f58844b1a94565b62cd660aaa.png)
当这种情况下,第一次遍历到原数组为3,前缀和数组为6的位置的时候.此时pre-k=0,是刚好满足情况的.所以需要先预设一个mp[0]=1的情况.
-
为什么是res+=mp[nums[i]-k]:
举个例子:K仍为6

这道题的答案是4,当遍历到第一个6的位置上时,得到第一个答案.遍历到第二个位置时,得到第二个答案.这两种情况都是:pre-k=0
遍历到12时得到第三个答案,此时pre-k=6.那么此时只有三个答案嘛?不是的,12-第一个6是一个答案.12-第二个6也是一个答案.
遍历到第二个位置时,得到第二个答案.这两种情况都是:pre-k=0
遍历到12时得到第三个答案,此时pre-k=6.那么此时只有三个答案嘛?不是的,12-第一个6是一个答案.12-第二个6也是一个答案.
所以:res+=mp[nums[i]-k],是为了直接加上相同情况的可能.
相关文章:
【前缀和】560.和为 K 的子数组
Halo,这里是Ppeua。平时主要更新C,数据结构算法,Linux与ROS…感兴趣就关注我bua! 和为K的子数组 题目:示例:题解:解法一:解法二: 题目: 示例: 题解: 解法一: 暴力解法:我们很容易想到通过两个for循环去遍…...
【Docker】安全及日志管理
安全及日志管理 Docker 安全及日志管理一:Docker 容器与虚拟机的区别1. 隔离与共享2. 性能与损耗 二:Docker 存在的安全问题1.Docker 自身漏洞2.Docker 源码问题 三:Docker 架构缺陷与安全机制1. 容器之间的局域网攻击2. DDoS 攻击耗尽资源3.…...
基于x-scan扫描线的3D模型渲染算法
基于x-scan算法实现的z-buffer染色。c#语言,.net core framework 3.1运行。 模型是读取3D Max的obj模型。 x-scan算法实现: public List<Vertex3> xscan() {List<Vertex3> results new List<Vertex3>();SurfaceFormula formula g…...
LeetCode36.Valid-Sudoku<有效的数独>
题目: 思路: 这题并不难,它类似于N皇后问题。在N皇后问题中,行,列,对角线,写对角线,都不能出现连续的皇后。 本题类似,不过他是行,列,还有一个B…...
Linux中的pause函数
2023年7月29日,周六上午 函数原型 在Linux中,pause()函数用于使当前进程暂停执行,直到接收到一个信号。 #include <unistd.h>int pause(void);pause()函数不接受任何参数。 通常,pause()函数用于编写简单的信号处理程序&…...
CommonCollections6链分析
前面和CC1一样 优点是不限制jdk版本和cc的版本 先开一个ChainedTransformer 然后创LazyMap 我们顺便执行一下避免上面写错 能弹计算器 没问题 后面就是CC6不同的地方了 我们需要一个TiedMapEntry 因为需要一个类调用了get方法 在TiedMapEntry的getValue()方法中调用了get()…...
优化基于tcp,socket的ftp文件传输程序
原始程序: template_ftp_server_old.py: import socket import json import struct import os import time import pymysql.cursorssoc socket.socket(socket.AF_INET, socket.SOCK_STREAM) HOST 192.168.31.111 PORT 4101 soc.bind((HOST,PORT)) p…...
MySQL 数据库 【增删查改(二)】
目录 一、表的设计 1、一对一 2、一对多 3、多对多 二、新增 三、查询 1、聚合查询 (1)聚合函数: (2) group by 子句 (3)having 2、联合查询 (1)内连接 (2)外连接 (3)自链接 (4)…...
力扣 -- 978. 最长湍流子数组
一、题目 二、解题步骤 下面是用动态规划的思想解决这道题的过程,相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴。 三、参考代码 class Solution { public:int maxTurbulenceSize(vector<int>& nums) {int nnums.size();vector<int> f(n);…...
甘特图 Dhtmlx Gantt
介绍 在一些任务计划、日程进度等场景中我们会使用到甘特图,Dhtmlx Gantt 对于甘特图的实现支持很友好,文档API介绍全面,虽然增强版的收费,但免费版的足以够用。 官网:https://docs.dhtmlx.com/gantt/ 安装dhtml gannt…...
iOS 应用上架流程详解
iOS 应用上架流程详解 欢迎来到我的博客,今天我将为大家分享 iOS 应用上架的详细流程。在这个数字化时代,移动应用已经成为了人们生活中不可或缺的一部分,而 iOS 平台的 App Store 则是开发者们发布应用的主要渠道之一。因此,了解…...
Python入门【LEGB规则、面向对象简介、面向过程和面向对象思想、面向对象是什么? 对象的进化 、类的定义、对象完整内存结构 】(十三)
👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误…...
【消息中间件】原生PHP对接Uni H5、APP、微信小程序实时通讯消息服务
文章目录 视频演示效果前言一、分析二、全局注入MQTT连接1.引入库2.写入全局连接代码 二、PHP环境建立总结 视频演示效果 【uniapp】实现买定离手小游戏 前言 Mqtt不同环境问题太多,新手可以看下 《【MQTT】Esp32数据上传采集:最新mqtt插件(支…...
【C语言初阶】指针篇—上
目录 1. 指针是什么?2. 指针和指针类型2.1 指针-整数2.2 指针的解引用 3. 野指针3.1 野指针成因1. 指针未初始化2. 指针越界访问3. 指针指向的空间释放 3.2 如何规避野指针 1. 指针是什么? 指针是什么? 指针理解的2个要点: > 1…...
基于FasterRCNN深度学习网络的车辆检测算法matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心程序 ....................................................................... % 训练Faster R-…...
机器学习深度学习——多层感知机
👨🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——感知机 📚订阅专栏:机器学习&&深度学习 希望文章对你们有所帮助 上一节…...
Django模型将模型注释同步到数据库
1、安装django-comment-migrate库 pip install django-comment-migrate 2、将库注册到settings.py文件中 INSTALLED_APPS [...django_comment_migrate, # 表注释... ] 3、加注释 3.1、给模型(表)加注释 在模型的class Meta中编辑 verbose_name&…...
STM32 Flash学习(二)
STM32F1的官方固件库操作FLASH的几个常用函数。这些函数和定义分布在源文件stm32f1xx_hal_flash.c/stm32f1xx_hal_flash_ex.c以及头文件stm32f1xx_hal_flash.h/stm32f1xx_hal_flash_ex.h中。 锁定解函数 对FLASH进行写操作前必须先解锁,解锁操作:在FLA…...
kotlin获取泛型集合的类型信息
通过 reified 关键字和内联函数来实现 inline fun <reified T> getClassFromList(list: List<T>): Class<T> {return T::class.java }fun main() {val list listOf("Hello", "World")val clazz getClassFromList(list)println(clazz)…...
AQS源码解析
关于 AQS,网上已经有无数的文章阐述 AQS 的使用及其源码,所以多这么一篇文章也没啥所谓,还能总结一下研究过的源码。源码解析和某某的使用,大概是互联网上 Java 文章中写得最多的主题了。 AQS AQS 是 AbstractQueuedSynchronize…...
保姆级教程:用Ansys Zemax从零设计一个汽车HUD(附挡风玻璃反射优化技巧)
从零开始用Ansys Zemax设计汽车HUD:避坑指南与实战技巧 在汽车智能化浪潮中,抬头显示系统(HUD)正从高端车型的选配逐渐成为主流配置。对于光学工程师而言,掌握HUD设计能力已成为职业发展的关键技能。本文将带你从零开始…...
Spec-Kit + Superpowers 实战:Go语言博客论坛系统的规范驱动开发
从“凭感觉写代码”到“按规范做工程”,一套完整的AI驱动开发方法论落地 一、引言:AI编程的“效率陷阱” 2024年Google DORA报告揭示了一个令人困惑的数据:AI编码助手采用率每提升25%,软件交付稳定性反而下降7.2%。问题出在哪?研究表明,当上下文从1K Token扩展到32K Tok…...
影刀RPA跨境店群运营架构:Python协同Chromium底层调度与高并发容器化实战
定了。在跨境电商自动化的技术角斗场里,我们终于打破了“商业指纹浏览器单机RPA”的低效垄断,实现了一套足以支撑万级店铺矩阵的分布式微服务调度架构。 这几天,科技圈被“DeepSeek V4 首发华为昇腾芯片,国产 AI 开始打破英伟达 …...
Miro致力弥合AI潜力与组织现实之间的鸿沟
Miro在Canvas 26上将其AI平台建设成为现代AI生态系统的连接层 — 汇聚团队、智能体以及已经使用的工具,将个体AI生产率变为整个组织的转型 Miro是一个面向团队的人工智能(AI)创新工作空间。该公司宣布推出多项AI平台创新,强化了其…...
人工模仿智能在专业领域中的挣扎
原文:towardsdatascience.com/the-struggle-of-artificially-imitated-intelligence-in-specialist-domains-6e63a4e0ebfc?sourcecollection_archive---------4-----------------------#2024-05-08 为什么通向真正智能的道路要经过本体论和知识图谱 https://mediu…...
收藏必备!小白程序员轻松上手大模型:RAG技术实战指南(含评测体系)
本文深入浅出地解析了RAG(检索增强生成)技术在大模型开发中的应用,覆盖了从文档加载、智能切分到索引构建、检索优化、生成调优的全链路实战指南,并介绍了进阶的Graph RAG和多跳推理。特别强调了“可测、可调、可信赖”的RAG工程化…...
Zed与VSCode争议背后真相:性能瓶颈到底是谁的锅
别被骗了!Zed比VS Code快?真正的原因让你哭笑不得!本文深入分析开发者社区对Zed编辑器与VS Code的争议,澄清性能瓶颈的真相在于语言服务器协议(LSP)而非编辑器本身,揭示Zed真正的优势在于原生Vim模式和架构简洁性&…...
图片跨域之谜:img 标签真的“畅通无阻”吗
🖼️ 图片跨域之谜:img 标签真的“畅通无阻”吗? 🤔 核心疑问 在前端开发中,我们常听到“同源策略”限制了跨域请求。但是,当你直接在 HTML 中写 <img src"https://other-domain.com/logo.png&qu…...
[寻找时间序列数据中异常值终极指南(第三部分)](https://towardsdatascience.com/the-ultimate-guide-to-finding-outliers-in-yo
原文:towardsdatascience.com/the-ultimate-guide-to-finding-outliers-in-your-time-series-data-part-3-0ff73ce28ca3...
什么样的落地灯对小孩看书好?家长首选落地灯推荐清单,优选品质
选护眼大路灯这事吧,我以前也踩过坑:有的灯亮是亮,但眩光明显,盯久了眼睛就发干;还有的调亮度很难掌控,忽明忽暗看着就累。所以我比较在意什么样的落地灯对小孩看书好?下面给大家挑了5款口碑不错…...
