
前缀和
文章平均质量分 95
前缀和的概念以及LeetCode的相关题目。
伟大的车尔尼
走自己的路,让别人去说吧!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
前缀和实现题目:二维区域和检索 - 矩阵不可变
这道题是「区域和检索 - 数组不可变」的进阶,要求计算子矩阵的元素和。这道题可以复用「区域和检索 - 数组不可变」的做法,计算矩阵每一行的一维前缀和,计算子矩阵的元素和时遍历子矩阵的每一行,但是该做法的每次查询的时间复杂度和查询范围的行数有关,无法实现O1O(1)O1时间的查询。使用二维前缀和,则可以实现O1O(1)O1时间的查询。原创 2025-05-29 18:00:00 · 671 阅读 · 0 评论 -
前缀和题目:元素和为目标值的子矩阵数量
的子数组个数,做法是从左到右遍历数组,遍历过程中计算前缀和,并使用哈希表记录每个前缀和的出现次数,遍历结束之后即可得到数组中的元素和等于。对于每个行下标区间,需要使用数组存储每一列的元素和以及使用哈希表存储前缀和,每一列的元素和数组的长度是。的一个子矩阵,子数组的元素和等于对应的子矩阵的元素和。的行下标区间,对于每一列计算该行下标区间中的元素和,则可以得到一个长度为。的时间计算该行下标区间中的元素和为目标值的子矩阵数量,因此时间复杂度是。的值之后,如果存在以当前元素结尾的子数组的元素和等于。原创 2025-07-24 18:00:00 · 984 阅读 · 0 评论 -
前缀和题目:元素和小于等于阈值的正方形的最大边长
这道题要求返回矩阵matmat中的元素和不超过thresholdthreshold的正方形区域的最大边长。计算正方形区域的元素和需要通过二维前缀和实现,二维前缀和的实现可以使用「二维区域和检索 - 矩阵不可变」的做法。原创 2025-07-21 18:00:00 · 1326 阅读 · 0 评论 -
前缀和题目:表现良好的最长时间段
根据该结论,可以排除不可能是表现良好的最长时间段的开始下标的下标。以下用「时间段」表示表现良好的时间段,用「最长时间段」表示表现良好的最长时间段。的时间,得到前缀和数组之后,需要从左到右遍历前缀和数组将下标入单调栈,然后从右到左遍历数前缀和数组计算表现良好的最长时间段。一个表现良好的时间段是指在该时间内的劳累的天数严格大于不劳累的天数。的子数组对应的时间段也是表现良好的时间段,且该时间段的长度。的元素个数,则该子数组对应的时间段是表现良好的时间段。的子数组对应的时间段为表现良好的时间段,其长度为。原创 2025-07-17 18:00:00 · 1696 阅读 · 0 评论 -
前缀和题目:使数组互补的最少操作次数
之后,遍历差分数组,计算每个元素和对应的操作次数,得到最少操作次数。一次更新差分数组的值,需要遍历差分数组一次计算最少操作次数,因此时间复杂度是。,因此更新差分数组的效果是两次更新抵消,不会更新差分数组的任何元素值。个区间,按照区间从小到大的顺序,每个区间对应的操作次数依次是。范围中的任意整数,因此每一对元素的和的取值范围是。因此,如果存在空区间,上述解法仍可以得到正确的结果。在不同区间对应的一对元素的操作次数如下。为了得到使数组互补的最少操作次数,需要对。,表示数组中的所有元素都需要替换,对于。原创 2025-07-14 18:00:00 · 1695 阅读 · 0 评论 -
前缀和题目:有序数组中差绝对值之和
按非递减顺序排序,因此数组中的任意两个元素的差的绝对值等于后面的元素减前面的元素(即下标大的元素减下标小的元素)。计算前缀和与计算答案数组各需要遍历数组。与数组中所有其他元素差的绝对值之和。个元素之和,可以在遍历数组。的全部元素之和,在遍历数组。遍历结束之后即可得到结果数组。注意返回值不计入空间复杂度。标题:有序数组中差绝对值之和。实现方面,可以维护两个变量。的过程中更新两个变量的值。建立并返回一个整数数组。的情况可以合并,即当。解释:假设数组下标从。原创 2025-07-10 18:00:00 · 959 阅读 · 0 评论 -
前缀和题目:你能在你最喜欢的那天吃到你最喜欢的糖果吗?
注意在满足第二条规则的前提下,可以在同一天吃不同类型的糖果。类糖,需要计算两个区间,判断这两个区间是否存在交集。对于第二个区间,为了快速得到吃糖果数量的区间,需要计算数组。标题:你能在你最喜欢的那天吃到你最喜欢的糖果吗?一次计算每个查询的结果,每个查询的计算时间是。个查询,如果对应的两个区间存在交集,则。同时给定一个二维数组。天可以吃糖果的数量的区间记为。类糖的吃糖果数量的区间记为。类糖,吃糖的数量一定大于。颗糖果的前提下可以在第。颗糖的情况下是否能在第。,为了判断在每天至少吃。的前缀和,即下标范围。原创 2025-07-07 18:00:00 · 787 阅读 · 0 评论 -
前缀和题目:满足三条件之一需改变的最少字符数
对于三个条件分别得到满足每个条件的最少操作数之后,其中的最小值即为达成目标所需的最少操作数。为了计算达成目标所需的最少操作数,需要分别计算使两个字符串满足每个条件的最少操作数。的数组记录每个字母的出现次数,然后分别计算两个数组的前缀和数组,记为。第一个条件和第二个条件相似,可以使用前缀和的思想计算最少操作数。的时间,计算前缀和数组以及计算满足每个条件的最少操作数需要。满足第一个条件和第二个条件的最少操作数计算如下。遍历所有的字母之后即可得到满足第三个条件的最少操作数。个小写字母计算操作数。原创 2025-07-03 18:00:00 · 1532 阅读 · 0 评论 -
前缀和题目:航班预订统计
最直观的做法是对于每个预订更新航班区间中的所有航班的座位数,最坏情况下每个预订需要。为了降低更新航班座位数的时间复杂度,需要使用差分数组。的时间更新航班的座位数,该时间复杂度过高,需要优化。,答案数组的其余相邻元素之间的差值都不变,因此可以将。遍历所有预订之后,计算差分数组的前缀和数组,即为答案。计算前缀和并更新数组中的每个元素值,遍历结束之后的。,计算答案数组需要遍历差分数组一次计算前缀和,时间是。已经转换成答案数组的下标,需要将答案数组。更新差分数组,每次更新的时间是。,答案数组的下标范围是。原创 2025-06-30 18:00:00 · 1625 阅读 · 0 评论 -
前缀和题目:连续数组
需要遍历数组一次计算前缀和,对于每个元素,更新前缀和、计算答案与操作哈希表的时间都是。由于这道题要求寻找符合要求的最长子数组,因此需要记录每个前缀和的第一次出现的下标。,遍历过程中计算前缀和,并使用哈希表记录每个前缀和的首次出现下标,同时维护。由于哈希表中存储的是每个前缀和第一次出现的下标,因此当遍历到下标。,如果这两个下标对应的前缀和相同,则下标范围。时,如果哈希表中存在相同前缀和的下标。数量相同的最长子数组,当子数组中的。的每个子数组,判断每个子数组中的。数量相同的最长子数组)的长度是。原创 2025-06-26 18:00:00 · 1736 阅读 · 0 评论 -
前缀和题目:连续的子数组和
的余数,并使用哈希表记录每个余数的首次出现下标。空间复杂度主要取决于哈希表,哈希表中的不同余数个数不超过。,因此应该寻找符合要求的最长子数组,需要记录每个余数的第一次出现的下标。的余数,对于每个元素,更新余数、计算答案与操作哈希表的时间都是。由于哈希表中存储的是每个余数第一次出现的下标,因此当遍历到下标。的前缀和,根据前缀和得到任意一个子数组的元素和。表示当前下标,则以当前元素结尾的和为。的值之后,判断哈希表中是否存在余数。时,如果哈希表中存在相同余数的下标。的子数组的元素和,需要计算数组。原创 2025-06-23 18:00:00 · 630 阅读 · 0 评论 -
前缀和题目:和可被 K 整除的子数组
的余数,并使用哈希表记录每个余数的出现次数。的余数,对于每个元素,更新余数、计算答案与操作哈希表的时间都是。子数组个数,因此对于遍历到的每个元素,必须在获得哈希表中的余数。的值之后,如果存在以当前元素结尾的子数组的元素和能被。的前缀和,根据前缀和得到任意一个子数组的元素和。整除,则一定存在更短的前缀满足前缀和模。,则表示已经遍历过的前缀中不存在前缀和模。的出现次数,否则会多计算空子数组的情况。的出现次数之后更新哈希表中的余数。的子数组的元素和,需要计算数组。,则以当前元素结尾的子数组中有。原创 2025-06-19 18:00:00 · 1833 阅读 · 0 评论 -
前缀和题目:和为 K 的子数组
遍历过程中计算前缀和,并使用哈希表记录每个前缀和的出现次数。需要遍历数组一次计算前缀和,对于每个元素,更新前缀和、计算答案与操作哈希表的时间都是。可以使用前缀和的思想,计算以每个元素结尾的子数组中有多少个子数组的元素和等于。子数组个数,因此对于遍历到的每个元素,必须在获得哈希表中的前缀和。空间复杂度主要取决于哈希表,哈希表中的不同前缀和个数为。的值之后,如果存在以当前元素结尾的子数组的元素和等于。子数组是数组中的元素组成的连续非空子序列。的出现次数之后更新哈希表中的前缀和。个子数组的元素和等于。原创 2025-06-16 18:00:00 · 1476 阅读 · 0 评论 -
前缀和题目:子数组异或查询
因此计算子数组的元素按位异或时,不能使用遍历子数组的做法,而是需要使用时间复杂度更低的做法。可以使用前缀和的思想实现。这道题要求对于每个查询计算子数组的元素按位异或。一次计算每个查询的结果,每个查询的计算时间是。一次计算前缀异或数组,需要遍历数组。的长度以及查询的个数最大为。一次计算得到前缀异或数组。的前缀异或,即下标范围。标题:子数组异或查询。根据按位异或的性质,原创 2025-06-12 18:00:00 · 622 阅读 · 0 评论 -
前缀和题目:寻找数组的中心下标
左侧子数组的元素之和即为数组的前缀和,将整个数组的元素之和减去左侧子数组的元素之和以及当前下标处的元素,即可得到右侧子数组的元素之和。对于数组中的特定下标,该下标将数组分成三个部分:下标左侧的子数组、下标处的元素、下标右侧的子数组。左右两侧的子数组可以为空,三个部分的元素之和为整个数组的元素之和。不是中心下标时,需要从左到右遍历数组寻找中心下标,遍历过程中更新左侧子数组的元素之和与右侧子数组的元素之和。是数组的一个下标,其左侧(不包含中心下标)所有元素的和等于其右侧(不包含中心下标)所有元素的和。原创 2025-06-09 18:00:00 · 691 阅读 · 0 评论 -
前缀和题目:逐步求和得到正数的最小值
加上数组中从首个元素到该元素的所有元素的前缀和,因此从左到右遍历数组,遍历过程中依次计算每个元素的前缀和,并确保累加和总是不小于。表示前缀和,从左到右遍历数组的过程中,依次将每个元素加到。需要遍历数组一次计算每个元素的前缀和。中的元素(从左到右)累加求和。都只会将值增加,因此可以确保。标题:逐步求和得到正数的最小值。,需要确保对于每个元素都满足。是正整数,因此其最小值是。为了确保累加和总是不小于。即为确保累加和总是不小于。,使得累加和总是大于等于。,在第三次累加时,和小于。每个元素的累加和等于。原创 2025-06-05 18:00:00 · 880 阅读 · 0 评论 -
前缀和题目:一维数组的动态和
按照下标从小到大的顺序依次计算每个元素的动态和,则计算每个元素的动态和的时间是。中的所有元素之和,因此可以直接计算动态和。计算每个元素的动态和的时间是。计算每个元素的动态和的时间是。注意返回值不计入空间复杂度。注意返回值不计入空间复杂度。解释:动态和计算过程为。解释:动态和计算过程为。标题:一维数组的动态和。原创 2025-06-02 18:00:00 · 651 阅读 · 0 评论 -
前缀和实现题目:区域和检索 - 数组不可变
中的任意子数组的元素和,方法是首先计算数组。的前缀和数组并计算每个元素的前缀和,每次。这道题是一维前缀和的实现与应用。的前缀和数组,然后根据前缀和数组在。时间复杂度:构造方法的时间复杂度是。的时间内计算任意子数组的元素和。构造方法需要创建长度为。操作计算子数组的元素和的时间是。标题:区域和检索 - 数组不可变。的时间计算整个前缀和数组。的前缀和,即下标范围。的值已知时,可以使用。原创 2025-05-26 18:00:00 · 737 阅读 · 0 评论 -
前缀和的概念
前缀和指的是数组中从首个元素开始的连续子数组中的元素之和,由于从首个元素开始的连续子数组是数组的前缀,因此该子数组中的元素之和称为前缀和。一维数组和二维数组都可以计算前缀和,一维数组的前缀和更常见。用numsnums表示原数组。当numsnums是一维数组或二维数组时,前缀和的定义如下。当numsnums是一维数组时,用nnn表示数组的长度,则对于0≤i≤n0≤i≤nnumsnums的长度为iii的前缀和为numsnums的下标范围0i−1。原创 2025-05-22 18:00:00 · 689 阅读 · 0 评论