首页 > TAG信息列表 > preSum

最大子数组 && 最大子矩阵

      https://leetcode.cn/problems/maximum-subarray/   func maxSubArray(nums []int) int { maxAns:=-99999999999 len:=len(nums) ans:=0;begin:=0 le:=0;ri:=len-1 for i:=0;i<len;i++{ ans=ans+nums[i] if ans>=maxAns{

树状数组-327. 区间和的个数

问题描述 给你一个整数数组 nums 以及两个整数 lower 和 upper 。求数组中,值位于范围 [lower, upper] (包含 lower 和 upper)之内的 区间和的个数 。 区间和 S(i, j) 表示在 nums 中,位置从 i 到 j 的元素之和,包含 i 和 j (i ≤ j)。 示例 1: 输入:nums = [-2,5,-1],

算法:前缀和

前缀和 一、介绍 前缀和算法是一种数据预处理方法,可用于快速求数组的区间和。前缀和是一种典型的空间换时间思想的应用。 前缀和可以简单地理解为数组的前 i 个元素的和,当然其具体可以应用在一维以及二维的数组中: 快速求数组前 i 项之和 快速求数组的 [i,j] 范围内的和 快速求二

前置知识:前缀累加和

前置知识:前缀累加和 arr[   i ....j  ]    求sum[ i, j ]的和 等价于 sum[ i, j ] = preSum[ 0, j ] - preSum[ 0, i-1 ]   前缀和的生成: index      0  1  2  3  4   5  6   arr [-3, 1, 2, 4, 0, -1, 5]   遍历arr数组一遍preSum数组就能生成好 preSum[-3,

力扣304(java)-二维区域和检索-矩阵不可变(中等)

题目: 给定一个二维矩阵 matrix,以下类型的多个请求: 计算其子矩形范围内元素的总和,该子矩阵的 左上角 为 (row1, col1) ,右下角 为 (row2, col2) 。实现 NumMatrix 类: NumMatrix(int[][] matrix) 给定整数矩阵 matrix 进行初始化int sumRegion(int row1, int col1, int row2, int

剑指 Offer II 011. 0 和 1 个数相同的子数组

  给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。   示例 1: 输入: nums = [0,1] 输出: 2 说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。 示例 2: 输入: nums = [0,1,0] 输出: 2 说明: [0, 1] (或 [1, 0]) 是具有相

leetocde-前缀和

package editor.cn; import java.util.Arrays; /** <p>给定一个整数数组 &nbsp;<code>nums</code>,处理以下类型的多个查询:</p> <ol> <li>计算索引&nbsp;<code>left</code>&nbsp;和&nbsp;<code>right</code>&nb

力扣_560 和为k的子数组

给你一个整数数组 nums 和一个整数 k ,请你统计并返回该数组中和为 k 的连续子数组的个数。 示例 1: 输入:nums = [1,1,1], k = 2 输出:2 示例 2: 输入:nums = [1,2,3], k = 3 输出:2   提示: 1 <= nums.length <= 2 * 104 -1000 <= nums[i] <= 1000 -107 <= k <= 107 来源:力扣(Leet

Leetcode 303. 区域和检索 - 数组不可变(中等) 304. 二维区域和检索 - 矩阵不可变(中等) 560. 和为K的子数组(中等) 前缀和数组求窗口和

labuladong讲解 303. 区域和检索 - 数组不可变(中等) 题目:    思路: 用前缀和记录开始到当前位置的元素和,这里前缀和数组长度n+1,presum[n+1]代表0-n的元素和   class NumArray { public: NumArray(vector<int>& nums) { int n=nums.size(); presum.resize(n

560. 和为 K 的子数组 (前缀和)

  难度中等1331 给你一个整数数组 nums 和一个整数 k ,请你统计并返回该数组中和为 k 的连续子数组的个数。   示例 1: 输入:nums = [1,1,1], k = 2 输出:2 示例 2: 输入:nums = [1,2,3], k = 3 输出:2 1 class Solution { 2 public: 3 int subarraySum(vector<int

LeetCode 560 和为 K 的子数组

群里看到有人面微软的一面题。 第一种方式,暴力解,二重循环查找sum=k的。 第二种方式,刚看了题解也还是有点晕,主要思路就是前缀和+哈希表。重点是一次循环,边统计当前下标的前缀和 边查找符合要求的前缀和是否已经出现过,并且将出现的次数加到ans中。 第一种方式。 func subarraySum(n

Leetcode 560. 和为 K 的子数组 前缀和 哈希

地址 https://leetcode-cn.com/problems/subarray-sum-equals-k/ 给你一个整数数组 nums 和一个整数 k ,请你统计并返回该数组中和为 k 的连续子数组的个数。 示例 1: 输入:nums = [1,1,1], k = 2 输出:2 示例 2: 输入:nums = [1,2,3], k = 3 输出:2   提示: 1 <= nums.length <= 2

689. 三个无重叠子数组的最大和

给你一个整数数组 nums 和一个整数 k ,找出三个长度为 k 、互不重叠、且全部数字和(3 * k 项)最大的子数组,并返回这三个子数组。 以下标的数组形式返回结果,数组中的每一项分别指示每个子数组的起始位置(下标从 0 开始)。如果有多个结果,返回字典序最小的一个。 来源:力扣(LeetCode) 链接:htt

【随想录10-番外 】前缀和数组

前缀和数组 学习自 小而美的算法技巧:前缀和数组 303. 区域和检索 - 数组不可变 304. 二维区域和检索 - 矩阵不可变 560. 和为 K 的子数组 1314. 矩阵区域和 区分是用前缀和还是用滑动窗口的关键是:元素是否有负数 一维前缀和 303. 区域和检索 - 数组不可变 为了将前缀和数组

leetcode53.最大子数组和

这道题我刚开始用暴力法发现很复杂很费劲,就放弃暴力法了。 方法一:贪心算法 1.准备变量:preSum记录上一次和,curSum记录本次和,maxAns记录最大和 2.遍历数组,当上一次计算的和preSum小于0时,另preSum直接等于当前数组元素 3.如果preSum大于等于0,curSum = preSum + 当前元素,并给preS

LeetCode-560. 和为 K 的子数组

题目来源 560. 和为 K 的子数组 题目详情 给你一个整数数组 nums 和一个整数 k ,请你统计并返回该数组中和为 k的连续子数组的个数。 示例 1: 输入: nums = [1,1,1], k = 2 输出: 2 示例 2: 输入: nums = [1,2,3], k = 3 输出: 2 提示: 1 <= nums.length <= 2 * 104 -1000 <= nums[i] <

acwing 4078. 01串

给定一个整数 k 。 现在,我们可以对 01 字符串进行如下操作: 选择其中恰好 k 个连续的 1,将它们都变为 0 。 如果一个 01 字符串可以通过若干次上述操作,变为一个全 0 字符串,那么就称这个字符串很优秀。 本题共需要回答 T 组询问,每组询问给定两个整数 l,r,并请你计算长度在 [l,r] 范围

三个无重叠子数组的最大和

给定数组 nums 由正整数组成,找到三个互不重叠的子数组的最大和。 每个子数组的长度为k,我们要使这3*k个项的和最大化。 返回每个区间起始索引的列表(索引从 0 开始)。如果有多个结果,返回字典序最小的一个。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximum-sum-of-

2021年10/15

https://leetcode.com/problems/minimum-possible-integer-after-at-most-k-adjacent-swaps-on-digits/ 自己想出来90%的算法,后面那个presum是看了花花酱博客的提示才恍然大悟的,但是我写的复杂度是O(N^2)。 看了花花酱的博客知道了Fenwick tree这个折中的presum算法。不过我觉得太

前缀和的应用(leetcode 303区域和检索 - 数组不可变)超详细

前缀和的应用(LeetCode 303区域和检索 - 数组不可变)超详细 我会从最基本的开始分析,如果不想看请直接跳转到前缀和 点我跳转到前缀和部分 这里由LeetCode的一道题引入 303. 区域和检索 - 数组不可变 - 力扣(LeetCode) (leetcode-cn.com) 给定一个nums数组,实现一个NumArray类

Leetcode 1480. 一维数组的动态和 前缀和数组的计算

地址 https://leetcode-cn.com/problems/running-sum-of-1d-array/ 给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。 请返回 nums 的动态和。   示例 1: 输入:nums = [1,2,3,4] 输出:[1,3,6,10] 解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+

Leetcode 303. 区域和检索 - 数组不可变

地址 https://leetcode-cn.com/problems/range-sum-query-immutable/ 给定一个整数数组  nums,求出数组从索引 i 到 j(i ≤ j)范围内元素的总和,包含 i、j 两点。 实现 NumArray 类: NumArray(int[] nums) 使用数组 nums 初始化对象 int sumRange(int i, int j) 返回数组 num

leetcode 连续的子数组和 中等

    前缀和+贪心+取模就行. 见代码 class Solution { public: bool checkSubarraySum(const vector<int>& nums, int k) { // preSum[i] % k 与其对应的下标的映射. // 贪心: 题目要求子数组次数至少为 2, 所以能够出现的长度越长越好, 即只存 第一次出现

算法笔记-滑动窗口&双指针

滑动窗口 分析题意,确定窗口的意义 设置窗口的left,right指针: (1)先移动右指针,当窗口满足条件时,记录状态; (2)再移动左指针,寻找下一个窗口 leetcode.1208 尽可能使字符串相等 class Solution { public:     int equalSubstring(string s, string t, int maxCost) {

leetcode 363. 矩形区域不超过 K 的最大数值和【二维前缀和+二分查找】

给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。 题目数据保证总会存在一个数值和不超过 k 的矩形区域。 示例 1: 输入:matrix = [[1,0,1],[0,-2,3]], k = 2 输出:2 解释:蓝色边框圈出来的矩形区域 [[0, 1], [-2, 3]] 的数值和