差分数组 技巧小记

news2024/12/28 5:27:05

差分数组

    • 差分数组
    • 二维差分

 


差分数组

如果两个信息“长得很像”,只要保留一个,对另一个,只要保留它们的差异,然后进行微调就行了。

差分数组:

  • 3210,3208,3206,3211,3220,3212……
  • 3210 【-2】【-2】【5】【9】【-8】……

适用场景,频繁对某个区间的元素进行增减。

// 初始化差分数组
diff[0] = nums[0];                         // 以第一个值为基础
for (int i = 1; i < nums.length; i++) 
    diff[i] = nums[i] - nums[i - 1];       // 存储差分值

对区间 nums[i…j] 的元素全部加 5:

  • diff[i] += 5
  • diff[j+1] -= 5(记得j+1是不需要的)

对区间 nums[i…j] 的元素全部减 5:

  • diff[i] += -5(减 5 以加 -5 的方式)
  • diff[j+1] -= -5(记得j+1是不需要的)
// 修改差分数组
void add(int l, int r, int c) {
    diff[l] += c;
    if( r+1 < diff.length )   
    	diff[r+1] -= c;
}

对比常规,给一个区间 [l,r] 上的数组加一个常数c, [l,r] 每个元素都要依次加上c,这样的时间复杂度是 O(n) 的。

而差分数组只修改头、尾,O(1) 的时间。
 


二维差分


这个人写得好:https://blog.csdn.net/m0_74215326/article/details/129620912

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/483255.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Three.js--》Gui.js库的使用讲解

目录 Gui.js库基本使用 使用three自带gui库实现基本操作 gui库实现下拉菜单和单选框 gui库分组方法实现 使用dat.gui第三方库 Gui.js库基本使用 gui.js说白了就是一个前端js库&#xff0c;对HTML、CSS和JavaScript进行了封装&#xff0c;学习开发3d技术时借助该库可以快速…

230502-LLM-Vicuna介绍、安装与注意事项整理

最终效果 在对话过程中&#xff0c;GPU与CPU均会有波动&#xff0c;但是主要还是CPU波动为主 相关资料 序号链接说明001本地CPU6G内存部署类ChatGPT模型&#xff08;Vicuna 小羊驼&#xff09; - 知乎极简安装版本&#xff0c;只支持CPU与命令行002最新开源语言模型 Vicuna 媲…

【Linux进阶之路】初始Linux

文章目录 一.时代背景二.硅谷发展模式三.操作系统基本定义常见的操作系统Linux系统的常见安装方式 四.基本指令的使用登录指令与用户相关的指令ls 指令——信息查看pwd指令——打印当前所处的文件位置cd指令——访问文件rm——删除指令touch——创建文件与修改文件信息tree ——…

Rust - 变量与数据的交互方式(clone)

在上一篇文章中我们介绍了变量与数据的交互方式-move&#xff0c;通过底层原理我们知道Rust 永远也不会自动创建数据的 “深拷贝”。因此&#xff0c;任何 自动的复制可以被认为对运行时性能影响较小。 但是如果我们 确实需要深度复制 String中堆上的数据&#xff0c;而不仅仅…

RT1010 PWM 组成配置和 PWMX 的使用

1. 前言 本篇博文将着眼于 i.MX RT1010 内部的 eFlexPWM&#xff0c;介绍其各个功能模块&#xff0c;以及 PWM 产生的原理。 2. 功能模块组成 以下是 RT1010 内部 PWM 的一个 Submoudle 的组成框图&#xff0c;从框图中我们可以看到&#xff1a; 自左向右依次有 Prescaler 对…

【C++入门】C++为什么要有缺省参数

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

后端程序员的前端必备【Vue】- 01 Vue入门

Vue概述与基础入门 1 Vue简介1.1 简介1.2 MVVM 模式的实现者——双向数据绑定模式1.3 其它 MVVM 实现者1.4 为什么要使用 Vue.js1.5 Vue.js 的两大核心要素1.5.1 数据驱动![请添加图片描述](https://img-blog.csdnimg.cn/963aca7d7a4447009a23f6900fdd7ee1.png)1.5.2 组件化 2 …

IDEA2022版教程上(下载、卸载、安装、新建工程、jdk设置、详细设置、新建/导入/删除 普通java模块、修改普通java模块名、同时打开多个工程、常用代码模板:非空判断,遍历,输出语句快捷键)

0、前景摘要 0.1 概览 0.2 套课程适用人群 初学Java语言&#xff0c;熟悉了记事本、EditPlus、NotePad或Sublime Text3等简易开发工具的Java初学者熟练使用其他Java集成开发环境&#xff08;IDE&#xff09;&#xff0c;需要转向IDEA工具的Java工程师们关注IDEA各方面特性的J…

BPMN2.0 任务-脚本任务

描述 脚本任务(script task)是自动执行的活动。当流程执行到达脚本任务时,会执行相应的脚本。 脚本任务用左上角有一个小“脚本”图标的标准BPMN 2.0任务(圆角矩形)表示。 脚本任务使用script与scriptFormat元素定义。 <scriptTask id="theScriptTask" nam…

Qt中的绘图事件

文章目录 QPainter 绘图绘图设备QPixmap QPainter 绘图 绘图事件 void paintEvent()声明一个画家对象 QPainter painter(this) this指定绘图设备画线、画圆、画矩形、画文字设置画笔 QPen 设置画笔宽度 、风格设置画刷 QBrush 设置画刷 风格 测试 #include "widget.h&quo…

科学计算库Numpy快速入门

目录 Numpy概述array数组数组结构数组类型数值运算排序操作数组形状操作数组生成函数四则运算随机模块文件读写 Numpy概述 NumPy 是 Python 中的一个开源数学库&#xff0c;提供了快速且便捷的数组处理功能&#xff0c;可以用来进行科学计算、数据分析、算法开发等多种任务。N…

InnoDB 磁盘结构及表空间 ( Tablespaces )

InnoDB磁盘主要包含Tablespaces&#xff0c;InnoDB Data Dictionary、Doublewrite Buffer、redo log和Undo Logs Tablespaces: 表空间分为系统表空间&#xff08;ibdata1文件&#xff09;、临时表空间、常规表空间、Undo表空间以及file-per-table表空间。系统表空间又包括双写…

CDH6.3.2-组件安装安全认证

HDFS 1.选择自定义。 2.选择HDFS ZK YARN然后点继续。 3.选择安装的主机。 4.审核更改默认就行&#xff0c;点继续。 5.配置HDFS的HA。 安装好以后点击hdfs进入实例就能够看到启动了高可用。 6.启动YARN的高可用。 KAFKA 更具需求修改资源 一直点继续就行了 FlUME HI…

CTF权威指南 笔记 -第二章二进制文件- 2.3 -静态链接

目录 地址空间分配 两个链接的方式 按序叠加 相似节合并 静态链接的详细过程 虚拟内存 重定位文件 静态链接库 地址空间分配 我们把之前的两函数分为两个文件 main.c extern int shared extern vooid fun(int *a,int *b); int main(){int a100;func(&a,&share…

MySQL监控告警及可视化:Zabbix+Percona PMP实现(Part III)

MySQL监控告警及可视化&#xff1a;ZabbixPercona PMP实现&#xff08;Part III&#xff09; 告警配置配置告警邮箱配置告警消息模板配置告警用户配置告警规则告警测试 告警配置 配置告警邮箱 在Zabbix Web前端的 Administration - Media Types - Email 中配置发送告警信息的…

什么是恺撒密码?如何用Python实现它(36)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 欢迎和猫妹一起&#xff0c;趣味学Python。 今日主题 猫妹目前在看的&#xff0c;ycl Python等级考试五级教材&#xff0c;有一章是介绍恺撒密码的。 今天&#xff0c;咱们…

2023-5-2面试题学习

1、内存的可见性你了解吗&#xff0c;讲述一下&#xff1f; 内存可见性是指多个线程访问同一共享变量时&#xff0c;在一个线程修改了该变量值后&#xff0c;下一个线程能立即看到这种变化的能力。 如果一个变量在多个线程间共享&#xff0c;那么为了避免出现数据不一致的情况&…

为什么DDD难落地?

为什么DDD难落地&#xff1f; lorne 2023-04-23 视频地址&#xff1a; 为什么DDD难落地&#xff1f;_哔哩哔哩_bilibili 洋葱架构图&#xff1a; DDD能解决什么问题&#xff1f; 其实DDD的核心是&#xff1a;提升业务的聚合性、提升业务的拓展性。 DDD的错误认知&#xff…

CentOS7安装和部署Jenkins

安装Java环境 检查旧版&#xff1a; rpm -qa | grep java若已经安装了旧版本&#xff0c;则需要先删除&#xff0c;删除方法&#xff1a; rpm -qa nodeps [java package]安装新版&#xff1a; yum install java-11-openjdk yum install java-11-openjdk-devel&#xff08;开…

07 KVM虚拟机引导固件安装

文章目录 07 KVM虚拟机引导固件安装7.1 概述7.2 安装方法7.2.1 安装edk软件包7.2.2 查询edk软件是否安装成功 07 KVM虚拟机引导固件安装 7.1 概述 针对不同的架构&#xff0c;引导的方式有所差异。x86支持UEFI&#xff08;Unified Extensible Firmware Interface&#xff09;…