差分数组工具类

news/2024/12/22 20:04:52/

差分数组工具类

  • 什么是差分数组
  • 工具类

什么是差分数组

其实差分数组和前缀和数组有点相似
前缀和主要适用于原始数组不会被修改的情况下,需要频繁查询某个区间的累计和

preSum[i]就是nums[0…i-1]所有元素的累加和
若求nums[i…j]的累加和,则计算preSum[j+1]-preSum[i]即可

差分数组主要适用于频繁对原始数组的某个区间的元素进行增减(即原数组需要频繁改变)

diff[0]=nums[0]
diff[i]就是nums[i]-nums[i-1]
对nums[i…j]的元素加3,只需要先让diff[i]+=3,然后让diff[j+1]-=3即可
diff[i]+=3相当于给nums[i…]的元素都加了3
diff[j+1]-=3相当于对nums[j+1]的元素都减了3
这两步合起来就是对nums[i…j]的元素加3

工具类

// 差分数组工具类
class Difference {// 差分数组private int[] diff;/* 输入一个初始数组,区间操作将在这个数组上进行 */public Difference(int[] nums) {assert nums.length > 0;diff = new int[nums.length];// 根据初始数组构造差分数组diff[0] = nums[0];for (int i = 1; i < nums.length; i++) {diff[i] = nums[i] - nums[i - 1];}}/* 给闭区间 [i, j] 增加 val(可以是负数)*/public void increment(int i, int j, int val) {diff[i] += val;if (j + 1 < diff.length) {diff[j + 1] -= val;}}/* 返回结果数组 */public int[] result() {int[] res = new int[diff.length];// 根据差分数组构造结果数组res[0] = diff[0];for (int i = 1; i < diff.length; i++) {res[i] = res[i - 1] + diff[i];}return res;}
}

http://www.ppmy.cn/news/987247.html

相关文章

2023牛客多校第三场 B.Auspiciousness

传送门 前题提要:没得说,赛时根本没想到dp,赛后翻各大题解看了很久,终于懂了dp的做法,故准备写一篇题解. 首先,先定义一下我们的 d p dp dp方程,考虑将处于 [ 1 , n ] [1,n] [1,n]的数当做小数,将处于 [ n 1 , 2 ∗ n ] [n1,2*n] [n1,2∗n]的数当做大数.那么对于我们的摸牌结…

【SA8295P 源码分析】55 - ifs2_la.img 镜像加载解析过程分析

【SA8295P 源码分析】55 - ifs2_la.img 镜像加载解析过程分析 一、startupmgr 可执行程序分析1. startupmgr\src\script.c 入口 main 函数:调用 init_loader_and_launcher 解析 scripts 数组二、ifsloader镜像加载流程分析:2.1 init_loader_and_launcher() :初始化rlimit rl…

学C的第三十一天(上)【通讯录的实现】

相关代码gitee自取&#xff1a;C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 学C的第三十天【自定义类型&#xff1a;结构体、枚举、联合】_高高的胖子的博客-CSDN博客 通讯录需求&#xff1a; 实现一个通讯录&#xff0c; 通讯录中存放保存人的信息&#xff1…

信号完整性分析基本概念之PRBS码型

在信号完整性测试或者仿真过程中&#xff0c;我们通常需要给一个通道发送PRBS码型&#xff0c;那么什么是PRBS码型呢&#xff1f; PRBS全称是Pseudo-Random Binary Sequence&#xff0c;翻译过来就是伪随机二进制序列&#xff0c;什么是伪随机呢&#xff0c;随机就是说PRBS码型…

【LeetCode】128.最长连续序列

题目 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1&#xff1a; 输入&#xff1a;nums [100,4,200,1,3,2] 输出&#xf…

Harbor Failed to start docker.service: Unit docker.service not found.

有可能是修改配置文件导致了问题&#xff0c;最近肯定修改过某个配置文件 本文只针对配置Harbor过程中遇到该问题&#xff0c;很有是deamon.json的 insecure-registries和docker.service的 ExecStart/usr/bin/dockerd --insecure-registry冲突了&#xff0c;删掉一个就好 我使…

【ROS第一讲】一、创建工作空间

【ROS第一讲】一、创建工作空间 一、工作空间1.src&#xff1a;2.build&#xff1a;3.devel&#xff1a;4.install: 二、创建工作空间1.工作空间的编译2.配置环境变量&#xff1a; 三、创建功能包 一、工作空间 1.src&#xff1a; 放置所有功能包源码的空间 2.build&#xf…

队列数据分析积累-1

https://mp.weixin.qq.com/s/XZV_5iioPDHnMQfEPCIlMg BKMR #首先清理缓存。 rm(list ls()) #运行R包&#xff0c;如果没有下载要先下载。 library(bkmr) library(ggplot2) #给数据赋值&#xff0c;如果要自己进行研究&#xff0c;数据的地址以及数据的变量需要对应的自行…