Leetcode差分数组、前缀和刷题总结

前缀和与差分:从LeetCode到ACM竞赛的5个实战技巧 本文深入解析了前缀和与差分算法在算法竞赛与刷题中的核心应用。通过5个从LeetCode到ACM的实战技巧,包括识别区间和、处理日程表问题、二维前缀和、结合差分进行区间更新,以及与双指针协同解决子数组计数问题,帮助读者掌握这两种能将区间操作复杂度降至O(1)的强大思想,从而高效应对各类子数组与子矩阵挑战。 阅读详情

1. 理论

区间题目总结 宫水三叶
前缀和差分数组定义
差分数组求前缀和就是原数组

2. 典型题目

T1109. 航班预定 (差分数组求前缀和,区间修改 + 单点查询) **

在这里插入图片描述

  • 思路分析
    差分数组,设区间为 L,R。对该区间加上值X 等价于 对于大于L区间全部加上X,对于大于R区间全部减去X
    对差分数组求前缀和,得到原理的数组
class Solution {
    public int[] corpFlightBookings(int[][] bookings, int n) {
        int[] diff = new int[n];//差分数组
        int[] res = new int[n];
        for(int[] booking:bookings){
            diff[booking[0]-1] += booking[2];
            if(booking[1]<n){
                diff[booking[1]] -= booking[2];
            }
        }
        res[0] = diff[0];
        for(int i=1;i<n;i++){
            res[i] = res[i-1] + diff[i];//求前缀和,得到原来的数组 
        }
        return res;
    }
}

T560. 和为K的子数组 (前缀和,区间和) *

在这里插入图片描述

class Solution {
    //前缀和
    public int subarraySum(int[] nums, int k) {
        //创建前缀和数组,注意下标1开始
        int n = nums.length;
        int[] prev = new int[n+1];
        int count = 0;
        prev [0] = 0;
        for(int i=1;i<n+1;i++){
            prev[i] = prev[i-1] + nums[i-1];
        }
        //对前缀和数组处理
        for(int left = 0;left<n+1;left++){
            for(int right=left+1;right<n+1;right++){
                if(prev[right]-prev[left] == k){
                    count++;
                }
            }
        }
        return count;
    }
}

T724.

T1.

T1248.

T974.

T523.

T930. 和相同的二元子数组(前缀和+hash,T560的加深版) **

在这里插入图片描述
跟前一题很像,但是需要利用hash来查找 不然超时

class Solution {
    public int numSubarraysWithSum(int[] nums, int goal) {
        int len = nums.length;
        int[] prev = new int[len+1];
        prev[0] = 0;
        for(int i=1;i<len+1;i++){
            prev[i] = prev[i-1] + nums[i-1];
        }
        int count = 0;
        Map<Integer,Integer> map = new HashMap<>();//和:出现的次数
        for(int i=0;i<len+1;i++){
            int temp = prev[i] - goal;
            if(map.containsKey(temp)){
                count += map.get(temp);
            }
            map.put(prev[i],map.getOrDefault(prev[i],0)+1);

        }
        return count;
    }
}
【LeetCode】分享|如何科学的刷题? 摘要:本文系统介绍了三种科学刷题方法:1)专题训练,按算法类型系统刷题,推荐先完成1700分以下题目;2)随机训练,关闭题目标签模拟实战,检验综合能力;3)突击训练,针对面试快速刷HOT 100经典题。建议结合心流理论,合理分配时间,初期可看题解学习思路,后期注重独立思考。附完整题单链接(含滑动窗口、动态规划等12大专题)及时间复杂度参考表,强调坚持积累与阶段性复盘的重要性。 阅读详情

相关推荐

leetcode-算法刷题笔记

官方网址http://leetcode-solution.cn/book 文前 [1]https://chrome.google.com/webstore/detail/leetcodecheatsheet/fniccleejlofifaakbgppmbbcdfjonl 正文 [1] https://github.com/azl397985856/leetcode/blob/master/daily/2019-07-31.md [2] https://leetcode-cn.com/problems/ad

温柔一刀 673

【leetcode】数组刷题总结(一)二分查找、双指针、前缀和、差分、花式遍历

LeetCode167题 两数之和II-输入有序数组 二分查找变体-查找目标为一对数 LeetCode35题 搜索插入位置 二分查找变体-查找目标的插入位置 LeetCode34题 在排序数组中查找元素的第一个和最后一个位置 查找有序重复数组的左右边界问题,与二分查找基础题相比,主要差异在对nums[mid]==target时的情况处理 LeetCode69题 x的平方根 本质是在找符合r*r

zs16113的博客 766

医学图像处理(一)使用U-Net进行MRI的肝脏分割

医学图像处理(一)使用U-Net进行MRI的肝脏分割数据集搜集训练集和测试集划分问题一: 测试集不包括GroundTruth问题二:T1和T2的数据能一起训练吗?问题三: T1的图像在文件夹中分成了InPhase和OutPhase,这个有什么区别?分离出肝脏将dicom文件转换为png格式数据增强U-net网络搭建自定义DatasetMain.py实验结果总结 图像分割小白一枚,之前接到一个MRI图像肝脏分割的任务。对于医学图像分割,第一想到的就是Unet. Unet在2015的MICCAI上首次提出,在医

qq_34003876的博客 2万+

力扣刷题——数组

题解:给定一个 S 和一个 T,请问你 S 中是否存在一个子串,包含 T 中所有字符且不包含其他字符。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。的异位词的子串,返回这些子串的起始索引。给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。空格将字符串中的单词分隔开。数组中心下标是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。题解:同上,输入一个串s,一个串p,找到s中所有p的排列,返回它们的起始索引。

qq_43762876的博客 1322

FPGA_adc采样并通过以太网发送到上位机

本项目使用FPGA-ZYNQ-7020采集8通道ADC数据,通过以太网上传到上位机显示波形PL部分包括数据的获取与处理,数据从PL传递到PSPS部分包括以太网的发送,由PL到PS的中断触发本文章不详细讲解背后原理 但保证每一步足够详细,跟着就能实现。本人FPGA平台 大磊FPGA7020开发板 vivado2020.2 vitis2020.2 匿名上位机公开版

weixin_42304868的博客 5623

TWR-K65F180M评估板:基于Cortex-M4的嵌入式原型开发实战指南

在嵌入式系统开发中,微控制器(MCU)是核心,而围绕其构建的硬件平台则是将想法转化为可工作原型的关键。Cortex-M4内核凭借其高效的流水线、DSP指令集和浮点单元,为实时控制与信号处理提供了强大的运算能力。其技术价值在于,能够在较低功耗下满足工业控制、物联网网关等场景对能效比的严苛要求。为了快速验证系统设计,开发者常使用成熟的评估板来规避底层硬件设计的风险,直接聚焦于应用开发。本文以恩智浦的TWR-K65F180M评估板为例,深入解析其基于**ARM Cortex-M4**内核的K65 MCU的硬件架构

weixin_33582311的博客 370

labuladong日常刷题-前缀和数组 | LeetCode 303区域和检索-数组不可变 304二维区域和检索-矩阵不可变 | 差分数组 1094拼车

前缀和数组 与 差分数组

weixin_66706867的博客 738

3D Gaussian Splatting的使用

Gaussian splatting 快速生成自己屋子的模型

gootyking的博客 1万+

wy的leetcode刷题记录_Day22

leetcode

m0_54015435的博客 323

YOLO11改进-注意力-引入自调制特征聚合模块SMFA

SMFA(自调制特征聚合模块): SMFA模块用于协同建模局部和非局部信息,它分为两个分支:一个是EASA(Efficient Approximation of Self-Attention,简化的自注意力分支),用于捕获非局部信息;另一个是LDE(Local Detail Estimation,局部细节估计分支),用于捕获局部细节。EASA通过对输入特征进行下采样,然后利用全局特征的方差进行调制,再与原始特征进行聚合,提取非局部结构信息。LDE分支则通过卷积操作提取输入特征中的高频局部信息。

qq_64693987的博客 2208

QT+OSG/osgEarth编译之七十六:gltf+Qt编译(一套代码、一套框架,跨平台编译,版本:osgEarth-3.3插件库osgdb_gltf)

通过一套gltf代码和框架,实现osgdb_gltf跨平台编译。 在Qt环境下,集成头文件、库文件,构建跨平台编译的pro文件。 通过构建的一套配置工程,基于Qt Creator IDE,完成跨平台的编译实践。 在Windows、Linux、MacOS等操作系统上进行测试,成功编译,形成的成果(头文件、库文件等)可在不同系统下调用或使用,从而更好地构建跨平台解决方案。 采用的是osgEarth3.3版本。 读者可参考博客中的集成原理,构建不同版本的osgdb_gltf跨平台包。

LuckyHanMo的博客 1799

【力扣】刷题总结

四:总的策略合起来最大(遍历判断要定位的为第i点)

weixin_43843390的博客 830

【智能模型系列】基于Unity和MediaPipe【手部追踪+手势识别】系统开发指南

在本文中,我将详细介绍一个基于MediaPipe的Unity手势识别系统,该系统能够识别多种常见手势(如拳头、点赞、胜利手势等),并提供完整的事件系统来处理手势状态变化。这个系统非常适合用于VR/AR交互、手势控制游戏或任何需要自然用户界面的应用场景。

纯技术流日常开发商业开发记录总结等 582

前缀和--原理详解与常见变式(C/C++ 实现)

前缀和(Prefix Sum)是一种预处理技术,通过预先计算"累加和"来加速区间查询。将 O(n) 的区间求和查询优化到 O(1)以空间换时间,先遍历一次数组构造前缀和数组,之后每次查询只需一次减法广泛应用于子数组和、区间计数、矩阵求和等场景一维,区间和 =二维其变式——差分数组、环形扩展、字符串哈希——都是这一思想的延伸。熟练掌握前缀和,可以将许多 O(n) 甚至 O(n²) 的题目优化到 O(1) 查询,是算法竞赛和面试中的必备技能。

m0_52005621的博客 510

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

OJ Coding指北

等差数列求和公式:首项加尾项的和乘以项数除以二。

秃秃然然的博客 379

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

差分与前缀和

使用差分与前缀和时不要过多考虑边界,数组空间申请大一些,能省很多判断。

weixin_74261199的博客 2084

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

前缀和数组、差分数组、树状数组在Leetcode中的应用

主要讲解树状数组,前缀和数组和差分数组在Leetcode中的应用举例。

qq_34603425的博客 1205

Leetcode刷题——前缀和

前缀和涉及对数组进行预处理,创建一个新数组,其中表示。这使得对子数组进行高效的成为可能。当需要对子数组执行多个时,可以使用这一模式。

weixin_53318497的博客 439

【leetcode刷题】49.和为K的子数组——Java版

原来这就是前缀和

公号:一条coding 1万+

前缀和,差分--灵神题单

到这里前缀和和差分的基础学习就结束,这里只是结合题目描述了基础的应用,原理需要自己去画图理解,因为单纯去看别人给你讲述原理终究不如自己思考来得扎实。若是存在错误,希望大家多多包含并指出。

Camellia0311的博客 718

【差分】详解二维前缀和和差分问题

大家也可以注意下,这里我们算影响范围算前缀和的时候没有让 i,j 都 + 1,也就是没有像第 3 小节那个题目那样计算前缀和,因为 d 数组本身为了不越界需要 + 1 处理,所以为了方便计算,前缀和也没有 + 1,只是在原来的数组上进行前缀和,也就是定义 sum[i][j] 为以 i,j 为右下角的区域的前缀和。以 sum[2][2] 为例子,下面图中蓝色部分代表 sum[2][1],绿色部分代表 sum[1][2],红色部分代表 sum[1][1]。根据这个定义,现在给一下 sum 数组的结构。

Jwasx的博客 1352

前缀和与差分

前缀和与差分的算法原理与代码模板

计算机、人工智能、算法和数学 475

LeetCode中有关前缀和的题目总结

前前缀和是一种重要的预处理,能大大降低查询的时间复杂度。 引入差分 差分:表示当前数字与上一个数字的差值 差分数组即是讲这一系列差分值放入一个数组。 举个例子,定义数组a为 int a[10]={0,2,4,5,6,10,3,7,8,9}; 那么差分数组dif的值为 2 2 1 1 4 -7 4 1 1 前缀和 前缀和,即利用一个数组sum来记录数组a前i项的和。 可用来求区间和,如求数组...

weixin_43206795的博客 5946

前缀和,差分算法理解

知道这个条件之后,这题就很简单了,我们只需要把我们累异或的结果都和这个最大值进行异或就行。

m0_73966521的博客 1111

论那些小而美的算法技巧:差分数组/前缀和

学算法认准labuladong东哥带你手把手撕力扣????点击下方卡片即可搜索????大家好,我是算法老司机 labuladong,本文给大家介绍一个小而美的算法技巧:差分数组。读完本...

fdl123456的博客 1161
上一篇: leetcode贪心算法总结
下一篇: 黑马点评项目问题总结
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值