前缀和
文章平均质量分 66
yuzhang_zy
现在的我不是最好的我,未来的我才是最好的我,每一篇博客都记录着我的成长
展开
-
724 寻找数组的中心下标(前缀和)
1. 问题描述:给你一个整数数组nums ,请计算数组的中心下标 。数组中心下标是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 。示例 1:输入:nums = [1, 7, 3, 6, 5, 6]输出:3解释:中心下标是 3 。左侧数之和 sum = nu.原创 2021-09-01 19:57:04 · 328 阅读 · 0 评论 -
560 和为K的子数组(枚举、前缀和、哈希表)
1. 问题描述:给定一个整数数组和一个整数k,你需要找到该数组中和为k的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数k的范围是[-1e7, 1e7]。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/subarray-su...原创 2021-07-23 18:16:27 · 140 阅读 · 0 评论 -
528 按权重随机选择(概率、前缀和、二分查找)
1. 问题模式:给定一个正整数数组w ,其中w[i]代表下标 i的权重(下标从 0 开始),请写一个函数pickIndex,它可以随机地获取下标 i,选取下标 i的概率与w[i]成正比。例如,对于 w = [1, 3],挑选下标 0 的概率为 1 / (1 + 3)= 0.25 (即,25%),而选取下标 1 的概率为 3 / (1 + 3)= 0.75(即,75%)。也就是说,选取下标 i 的概率为 w[i] / sum(w) 。示例 1:输入:["Solution"...原创 2021-07-20 22:10:24 · 312 阅读 · 0 评论 -
437 路径总和 III(一维情况的扩展-前缀和 + 哈希表)
1. 问题描述:给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。示例:root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8返回 3。和等于 8 的路径有:1. 5 -> 32. 5 -> 2 ->..原创 2021-06-30 15:09:02 · 165 阅读 · 1 评论 -
求解区间和为t的区间个数
在一维的时候,也即给出一个整数序列a1, a2,a3...an我们需要求解出区间总和等于t的区间数目,对于当前的右端点i,我们需要找到左端点k使得s[i] - s[j - 1] = t,也即对于右端点i,s[j - 1] = s[i] - t,我们可以可以使用前缀和 + 哈希表解决的,前缀和计算出所有区间[0, n]的区间总和,我们可以在遍历的时候求解出以当前i为区间右端点,判断哈希表中是否存在s[i] - t的值,如果存在说明存在[j, i]区间使得区间和等于t的,并且在遍历的时候使用哈希表来记录前缀和出原创 2021-06-29 22:56:36 · 552 阅读 · 2 评论 -
363 矩形区域不超过 K 的最大数值和(二维前缀和、bisect维护插入元素有序)
1. 问题描述:给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。题目数据保证总会存在一个数值和不超过 k 的矩形区域。示例 1:输入:matrix = [[1,0,1],[0,-2,3]], k = 2输出:2解释:蓝色边框圈出来的矩形区域[[0, 1], [-2, 3]]的数值和是 2,且 2 是不超过 k 的最大数字(k = 2)。示例 2:输入:matrix = [[2,2,-1]], k = 3输出..原创 2021-06-17 10:19:14 · 208 阅读 · 0 评论 -
304 二维区域和检索 - 矩阵不可变(二维前缀和)
1. 问题描述:给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2) 。上图子矩阵左上角 (row1, col1) = (2, 1) ,右下角(row2, col2) = (4, 3),该子矩形内元素的总和为 8。示例:给定 matrix = [ [3, 0, 1, 4, 2], [5, 6, 3, 2, 1], [1, 2, 0, 1, 5], [4, 1, 0, 1, 7], [1, 0...原创 2021-05-29 11:07:07 · 219 阅读 · 0 评论 -
303 区域和检索 - 数组不可变(前缀和)
1. 问题描述:给定一个整数数组 nums,求出数组从索引i到j(i≤j)范围内元素的总和,包含i、j两点。实现 NumArray 类:NumArray(int[] nums) 使用数组 nums 初始化对象int sumRange(int i, int j) 返回数组 nums 从索引i到j(i≤j)范围内元素的总和,包含i、j两点(也就是 sum(nums[i], nums[i + 1], ... , nums[j]))示例:输入:["NumArray", ...原创 2021-05-29 09:19:35 · 92 阅读 · 0 评论 -
1695 删除子数组的最大得分(滑动窗口、前缀和、字典)
1. 问题描述:给你一个正整数数组 nums ,请你从中删除一个含有若干不同元素的子数组。删除子数组的得分就是子数组各元素之和 。返回只删除一个子数组可获得的最大得分 。如果数组 b 是数组 a 的一个连续子序列,即如果它等于 a[l],a[l+1],...,a[r] ,那么它就是 a 的一个子数组。示例 1:输入:nums = [4,2,4,5,6]输出:17解释:最优子数组是 [2,4,5,6]示例 2:输入:nums = [5,2,1,2,5,2,1,2,5]输出:8解释:原创 2021-01-11 11:32:24 · 314 阅读 · 0 评论 -
1712 将数组分成三个子数组的方案数(前缀和 + 二分查找)
1. 问题描述:我们称一个分割整数数组的方案是好的 ,当它满足:数组被分成三个非空连续子数组,从左至右分别命名为 left ,mid ,right 。left 中元素和小于等于 mid 中元素和,mid 中元素和小于等于 right 中元素和。给你一个非负整数数组 nums ,请你返回好的分割nums 方案数目。由于答案可能会很大,请你将结果对 10 ^ 9 + 7 取余后返回。示例 1:输入:nums = [1,1,1]输出:1解释:唯一一种好的分割方案是将 nums 分成 [1] [1]原创 2021-01-10 15:53:10 · 658 阅读 · 0 评论 -
1685 有序数组中差绝对值之和(前缀和)
1. 问题描述:给你一个 非递减有序整数数组 nums 。请你建立并返回一个整数数组 result,它跟 nums 长度相同,且result[i] 等于 nums[i] 与数组中所有其他元素差的绝对值之和。换句话说, result[i] 等于 sum(|nums[i]-nums[j]|) ,其中 0 <= j < nums.length 且 j != i (下标从 0 开始)。示例 1:输入:nums = [2,3,5]输出:[4,3,5]解释:假设数组下标从 0 开始,那么r原创 2020-12-27 11:24:46 · 573 阅读 · 5 评论 -
1542 找出最长的超赞子字符串(状态压缩、前缀和 + 哈希思想)
1. 问题描述:给你一个字符串s。请返回s中最长的超赞子字符串的长度。「超赞子字符串」需满足满足下述两个条件:该字符串是 s 的一个非空子字符串 进行任意次数的字符交换后,该字符串可以变成一个回文字符串示例 1:输入:s = "3242415"输出:5解释:"24241" 是最长的超赞子字符串,交换其中的字符后,可以得到回文 "24142"示例 2:输入:s = "12345678"输出:1示例 3:输入:s = "213123"输出:6解释:"21...原创 2020-12-06 09:53:45 · 405 阅读 · 0 评论 -
1658 将 x 减到 0 的最小操作数(字典、前缀和计算某一个区间的和)
1. 问题描述:给你一个整数数组 nums 和一个整数 x 。每一次操作时,你应当移除数组 nums 最左边或最右边的元素,然后从 x 中减去该元素的值。请注意,需要修改数组以供接下来的操作使用。如果可以将x恰好减到0 ,返回最小操作数 ;否则,返回 -1 。示例 1:输入:nums = [1,1,4,2,3], x = 5输出:2解释:最佳解决方案是移除后两个元素,将 x 减到 0 。示例 2:输入:nums = [5,6,7,8,9], x = 4输出:-1示例 3:.原创 2020-11-20 21:09:26 · 662 阅读 · 0 评论 -
209 长度最小的子数组(前缀和+二分查找、滑动窗口)
1. 问题描述:给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。示例:输入:s = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。进阶:如果你已经完成了O(n) 时间复杂度的解法, 请尝试O(nlogn) 时间复杂度的解法。2. 思路分析:① 因为需要在一个区间中找到和大于等于s的最小长度,所以这个...原创 2020-11-09 09:36:56 · 361 阅读 · 0 评论 -
1524 和为奇数的子数组数目(动态规划、前缀和)
1. 问题描述:给你一个整数数组 arr 。请你返回和为奇数的子数组数目。由于答案可能会很大,请你将结果对 10^9 + 7 取余后返回。示例 1:输入:arr = [1,3,5]输出:4解释:所有的子数组为 [[1],[1,3],[1,3,5],[3],[3,5],[5]] 。所有子数组的和为 [1,4,9,3,8,5].奇数和包括 [1,9,3,5] ,所以答案为 4 。示例 2 :输入:arr = [2,4,6]输出:0解释:所有子数组为 [[2],[2,4],[2,4原创 2020-10-08 10:53:59 · 327 阅读 · 0 评论 -
1546 和为目标值的最大数目不重叠非空子数组数目(前缀和、哈希表)
1. 问题描述:给你一个数组 nums 和一个整数 target 。请你返回 非空不重叠 子数组的最大数目,且每个子数组中数字和都为 target 。示例 1:输入:nums = [1,1,1,1,1], target = 2输出:2解释:总共有 2 个不重叠子数组(加粗数字表示) [1,1,1,1,1] ,它们的和为目标值 2 。示例 2:输入:nums = [-1,3,5,1,4,2,-9], target = 6输出:2解释:总共有 3 个子数组和为 6 。([5,1]原创 2020-10-06 15:32:52 · 213 阅读 · 0 评论 -
1588 所有奇数长度子数组的和(前缀和、组合)
1. 问题描述:给你一个正整数数组arr,请你计算所有可能的奇数长度子数组的和。子数组 定义为原数组中的一个连续子序列。请你返回 arr中 所有奇数长度子数组的和 。示例 1:输入:arr = [1,4,2,5,3]输出:58解释:所有奇数长度子数组和它们的和为:[1] = 1[4] = 4[2] = 2[5] = 5[3] = 3[1,4,2] = 7[4,2,5] = 11[2,5,3] = 10[1,4,2,5,3] = 15我们将所有值求和得到 1 + 4 ...原创 2020-10-01 10:12:39 · 417 阅读 · 0 评论 -
560 和为K的子数组(前缀和、字典)
1. 问题描述:给定一个整数数组和一个整数k,你需要找到该数组中和为k的连续的子数组的个数示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。 数组中元素的范围是 [-1000, 1000] ,且整数k的范围是[-1e7, 1e7]。2. 思路分析:① 一开始比较容易想到的是暴力破解,依次从当前位置开始的区间[i, j]累加求和,判断是否等于k,假如等...原创 2020-09-28 17:12:00 · 130 阅读 · 0 评论