前缀和(一)

article/2025/9/15 11:30:27

本文首发自本人微信公众号:今天你A了吗。每日算法讲解,面试题,冲刺BAT大厂。微信扫码关注吧:
在这里插入图片描述

前缀和(一)仅涉及一维前缀和。前缀和(二)涉及二维前缀和。

一、介绍:什么是前缀和

假设我们有一个字符串ABCDE,什么是这个单词的前缀,A、AB、ABC、ABCD、ABCDE就是这个单词的前缀,就是从第一个字母开始,依次往后拼接。E、ED、EDC、EDCB、EDCBA被称为这个单词的后缀。

那么对于一个数组的前缀,例如数组a = [1,2,3,4,5],我们维护一个由前缀的和组成的数组sum,sum[i]表示数组中a[0]~ a[i] 的和。
sum[0] = a[0]
sum[1] = a[0] + a[1]
sum[2] = a[0] + a[1] + a[2]
sum[3] = a[0] + a[1] + a[2] + a[3]
sum[4] = a[0] + a[1] + a[2] + a[3] + a[4]
sum数组就被称为前缀和数组。

二、前缀和的作用

前缀和的最主要目的就是求子数组的和的大小。例如元素a[1]a[3]的和。
a[1] + a[2] + a[3] = sum[3] - sum[0]
注意:这里sum中的i表示的是前i个数的和,不是下标,因为题目中需要用到前0个数的和。

三、应用

下面通过一个例子说明一下前缀和的作用。
LeetCode 560.和为k的子数组:https://leetcode-cn.com/problems/subarray-sum-equals-k/
题意:给定一个整数数组和一个整数 k你需要找到该数组中和为 k的连续的子数组的个数。

思路1: 如果只使用for循环枚举子数组,并且求和,时间复杂度为O(n3)使用前缀和。使用前缀和:每次求出子数组的和,与k进行比较,时间复杂度O(n2)。

class Solution {public int subarraySum(int[] nums, int k) {int n = nums.length;int count = 0;int[] sum = new int[n]; //前缀和数组//得到前缀和数组sum[0] = nums[0];for(int i = 1; i < n; i++){sum[i] = sum[i-1] + nums[i];}//列举子数组for(int i = 0; i < n; i++){for(int j = -1; j < i; j++){ //这里从-1开始下面有解释int sumOfSub;if(j < 0)sumOfSub = sum[i];elsesumOfSub = sum[i] - sum[j];if(sumOfSub == k)count++;}}return count;}
}

解释:关于题目中的j = -1
a[1]+a[2] = sum[2]-sum[0]
a[0]+a[1]+a[2] = sum[2] //这里不需要减去任何东西,所以代码中用一个-1来表示这种特殊情况。

思路二: 使用Map + 前缀和进行优化
在上一个思路中,我们要求一个结尾下标为i的子数组的和是否为k,就需要对j-1遍历到i-1,来找到是存在否sum[i] - k = sum[j]。那么我们只要用map<前i个元素的前缀和,出现的次数>把i之前的前缀和的值记录下来,判断map中是否包含sum[i] - k即可。时间复杂度O(n)

class Solution {public int subarraySum(int[] nums, int k) {int n = nums.length;int count = 0;int[] sum = new int[n]; //前缀和数组Map<Integer, Integer> map = new HashMap<>();map.put(0, 1); //放入没有前缀和这种特殊情况,见思路一的解释,0这个值出现了1次//得到前缀和数组sum[0] = nums[0];for(int i = 1; i < n; i++){sum[i] = sum[i-1] + nums[i];}//列举子数组for(int i = 0; i < n; i++){if(map.containsKey(sum[i]-k))count += map.get(sum[i]-k) ;map.put(sum[i], map.getOrDefault(sum[i], 0) + 1);}return count;}
}

四、相关题目

  1. 有多少小于当前数字的数字 https://leetcode-cn.com/problems/how-many-numbers-are-smaller-than-the-current-number/
  2. 统计「优美子数组」 https://leetcode-cn.com/problems/count-number-of-nice-subarrays/

http://chatgpt.dhexx.cn/article/038RcMDp.shtml

相关文章

115://开头的链接怎么转磁力?

115浏览器是一款体积小巧、启动速度快的多功能网页浏览器&#xff0c;最近有些用户就来咨询小编115://开头的链接要如何转磁力&#xff1f;下面小编就来给大家详细分析一下这个问题。 115://开头的链接转磁力方法介绍 1、首先打开 115 浏览器&#xff0c;然后在其右上角的&…

磁力链接文件服务器,什么是磁力链接(BT、磁力链这些词语是什么意思?)

“知其然知其所以然”。我们经常在下载资料的时候能看到BT、磁力链等词语,百思特网这些词语到底是什么意思呢? 下载都会用,但是你了解吗? BT下载 传统的下载模式是每个客户端从服务器拷贝文件,跟校园内常用的FTP一样。因为服务器宽带是一定的,所以下载的人越多下载速度会…

磁力链前缀

magnet:?xturn:btih:

磁力链接 结构解析 分享

磁力链接由一组参数组成&#xff0c;参数间的顺序没有讲究&#xff0c;其格式与在HTTP链接末尾的查询字符串相同。最常见的参数是"xt"&#xff0c;是"exact topic"的缩写&#xff0c;通常是一个特定文件的内容散列函数值形成的URN&#xff0c;例如&#xf…

2021下半年最新编程培训机构排名出炉!

就目前的IT行业发展情况来看&#xff0c;市场对程序员的需求还是非常大的&#xff0c;参加编程培训对小白来说是一个不错的选择&#xff0c;毕竟在专业的编程培训机构学习&#xff0c;能够在短时间内掌握技术要领。如今的编程培训机构鱼龙混杂&#xff0c;教学质量也是参差不齐…

我,是一个培训班出来的程序员 | 程序员有话说

作者 l HeroMe 责编 | 伍杏玲 本文经授权转载自Hollis&#xff08;ID&#xff1a;hollischuang&#xff09; 这个城市的所有人都在忙碌的过生活&#xff0c;他们行色匆匆&#xff0c;车水马龙&#xff0c;他们认为时间就是金钱。 我在办公楼里俯视着他们&#xff0c;在这个…

培训机构毕业的程序员被歧视的背后逻辑

&#xff08;注&#xff1a;本文曾发表于《程序员》2015.11.B期&#xff09; 现在&#xff0c;像达内、华清远见、国嵌、北大青鸟、传播智客等等IT培训机构很多&#xff0c;为尚未毕业的大学生、毕业了一时找不到工作的大学生、工作后想转行的再就业者提供了一个掌握新技能的机…

为什么都瞧不起培训班出来的程序员?

培训机构出来的程序员怎么了&#xff1f; 不怎么&#xff0c;就是容易招偏见&#xff01; 某培训机构毕业的程序员大雄&#xff0c;和同班同学&#xff0c;一起伪造学历和经验&#xff0c;被HR发现后&#xff0c;全部被开除了。 而我在北京某大型培训机构&#xff08;以下简称“…

几张图告诉你程序员的残酷现状,培训机构出来的程序员可以吗

别只看不评论&#xff0c;谈谈你心中的程序员&#xff0c;感兴趣的话可以扫描左侧二维码 IT行业可以说在国内行业薪资排名中一直名列前茅&#xff0c;这也是为什么IT行业一直持续火爆的原因&#xff0c;随着前几年来的移动互联网热潮&#xff0c;催生了大量的Android开发岗位&…

为什么很多公司不要培训机构出来的程序员?

近几年&#xff0c;互联网创业潮让IT技术人员的需求大大增加&#xff0c;各类IT培训机构风生水起&#xff0c;办得如火如荼。然而&#xff0c;一些公司却招聘网站上写着”没有上过培训班的优先。“为什么会有这样的区别对待呢? 经过调查发现&#xff0c;培训机构出来的程序员被…

为什么很多公司不要从IT培训机构出来的程序员?

在很多平台看到这样的问题&#xff1a;为什么很多公司不要从IT培训机构出来的程序员&#xff1f;作为一名it培训行业从业者&#xff0c;我试着去了解和分析提出这种问题的人&#xff0c;其出发点和立场&#xff0c;并客观阐述个人对于这个问题的一些看法。 为什么有一些公司不…

如何看待培训机构出来的非科班程序员

看着身边的同学和朋友的情况&#xff0c;有感而发&#xff0c;打算从各方面角度说一说这件事。 近几年&#xff0c;互联网创业潮让IT技术人员的需求大大增加&#xff0c;各类IT培训机构风生水起&#xff0c;办得如火如荼。大多培训机构都是以保底工资nk&#xff0c;年薪轻松上…

程序员编程培训

作为公认的屌丝逆袭最佳途径&#xff0c;程序员一度成为一个非常吃香的职业。因为这是一个不太看重学历和性别的行业&#xff0c;只要你技术过关&#xff0c;就不愁没工作。那么如何才能成为一位合格的程序员呢&#xff1f;除了大学专业是计算机之外&#xff0c;报培训班或许是…

从培训机构出来的程序员,后来都怎么样了?

Python实战社群 Java实战社群 长按识别下方二维码&#xff0c;按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 知乎上有这样一个问题&#xff0c;培训班程序员几个月出来就月薪过万&#xff0c;那为什么我们还要花四年时间上大学&#xff1f; 乍一…

从培训机构出来的程序员,后来都怎么样了? | 程序员有话说

作者 | 素年清时 责编 | 伍杏玲 60s测试&#xff1a;你是否适合转型人工智能&#xff1f; https://edu.csdn.net/topic/ai30?utm_sourcecxrs_bw 【程序人生 编者按】随着互联网的大火&#xff0c;各大城市催生了一个又一个的培训班&#xff0c;每年以批量生产的模式向社会输送…

中国的程序员培训是不是有问题?

中国技术开放日的出海团对日本进行了为期一周的访问。笔者随行了头两天&#xff0c;参加 Slush Asia 大会&#xff0c;并访问了 Gungho 和 Deloitte 两家企业。虽然已经在日本生活了四年&#xff0c;但这样的体验却甚少&#xff0c;对中日两国的技术力有不少思考。 不知从什么时…

程序员培训班一般要多少钱?

程序员应该算是目前转行比较多的一个岗位&#xff0c;主要是现在程序员的薪资比较高&#xff0c;而且从事程序员培训的机构也比较多&#xff0c;大家有更多的机会和选择能够学好程序员开发技能&#xff0c;但是参加培训学习技能是需要一定的费用&#xff0c;而且价格并不是很低…

培训机构出来的程序员进不了大厂?

科班出身的程序员和培训机构出来的程序员到底有什么区别&#xff1f; 作者 | Sung Rhee 译者 | 弯月 责编 | 晋兆雨 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 十年前&#xff0c;获得计算机科学学位是进入蓬勃发展的技术领域的唯一途径。然而&#xff0…

现在培训机构出来的程序员还好找工作吗?

本篇文章主要解惑&#xff0c;后台粉丝留言询问的问题&#xff1a;小白0基础的朋友如何转行做程序员和培训机构培训后还能找到工作吗的问题。 日期&#xff1a;2021年8月16日 作者&#xff1a;任聪聪 培训机构出来的程序员为什么不好找工作的详解 答案是企业喜欢有经验的&…

快来看啊,2023成都Java培训机构排行榜出来啦!

来啦&#xff0c;来啦&#xff01;我带着2023成都最新Java培训机构排行榜来啦。不知道怎么选择一个好的Java培训机构&#xff1f;停止寻觅&#xff0c;别再犹豫&#xff0c;看我这一篇就够啦&#xff01; 一、成都动力节点 动力节点&#xff0c;09年成立&#xff0c;14年来只专…