当前位置: 首页 > news >正文

差分数组知识笔记

文章目录

    • 使用场景
    • 生成差分数组
    • 复原差分数组
    • Python代码

使用场景

频繁对某个区间所有元素进行加减相同值,推荐使用差分数组,可以避免每一次计算都把整个区间的元素遍历一遍。

生成差分数组

在这里插入图片描述

设差分数组为diff_arr,原数组为source_arr,数组长度为n,其中:
diff_arr[0] = source_arr[0]
diff_arr[i] = source_arr[i] - source_arr[i - 1],其中1 <= i < n
接下来对diff_arr的区间[1,3]进行加3,我们只要对diff_arr[1]进行+3操作,对diff_arr[4]进行减3操作,总结为:
对区间[i, j]进行加x操作,只需要对diff_arr[i] + x和diff_arr[j + 1] - x

对图中红字做出解释: 这里之所以对diff_arr[4]进行减3,是因为在还原数组的时候,后一项需要加上前一项的值,而我们只对[1, 3]范围内做加3的操作,4并不在操作范围内,所以需要提前减掉3。

复原差分数组

在这里插入图片描述
设复原数组为restore_arr,restore_arr第一项与diff_arr第一项相等,即:
restore_arr[0] = diff_arr[0]
restore_arr从第二项开始,restore_arr每一项等于diff_arr的当前项加上复原好的前一项,即:
restore_arr[i] = diff_arr[i] + restore_arr[i - 1],其中1 <= i < n

Python代码

class DiffArray:# 差分数组def initial(self, nums):# 初始化差分数组n = len(nums)diff = [0] * ndiff[0] = nums[0]for i in range(1, n):diff[i] = nums[i] - nums[i - 1]return diffdef increment(self, diff, i, j, val):# 加减操作diff[i] += valif j < len(diff) - 1:diff[j + 1] -= valdef restore(self, diff):# 恢复数组for i in range(1, len(diff)):diff[i] = diff[i] + diff[i - 1]if __name__ == '__main__':source_arr = [4, 3, 5, 6, 1]obj = DiffArray()diff_arr = obj.initial(source_arr)  #初始化差分数组obj.increment(diff_arr, 1, 3, 3)  # 区间[1, 3]做+3操作obj.restore(diff_arr)print(diff_arr)
http://www.xdnf.cn/news/644113.html

相关文章:

  • 嵌入式学习笔记——day26
  • C++ gtest单元测试
  • STM32八股【10】-----stm32启动流程
  • 如何利用好cursor
  • 【第四十六周】文献阅读:从 RAG 到记忆:大型语言模型的非参数持续学习
  • c++ overwrite
  • 华为OD机试真题——仿LISP运算(2025B卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
  • Linux应用程序 栈溢出 内存踩踏 问题 排查学习
  • 第九课 影像文章插图及图表制作完全指南:从原理到应用
  • 市场需求文档撰写
  • C++11(2):
  • 《算法导论(第4版)》阅读笔记:p1178-p1212
  • 吴恩达机器学习笔记:逻辑回归3
  • Python元类(Metaclass)深度解析
  • Volatile的相关内容
  • Lombok与Jackson实现高效JSON序列化与反序列化
  • Python类与对象:面向对象编程的基础
  • Kubernetes 核心原理详解
  • Python实现基于线性回归的空气质量预测系统并达到目标指标
  • 内存管理 : 02 内存分区与分页
  • Python实例题:Python打造漏洞扫描器
  • 【AI论文】KRIS-基准测试:评估下一代智能图像编辑模型的基准
  • LangChain4j HelloWorld
  • 分词算法BPE详解和CLIP的应用
  • 测试计划与用例撰写指南
  • SAP Commerce(Hybris)开发实战(二):登陆生成token问题
  • 企业级智能体 —— 企业 AI 发展的下一个风口?
  • 【公式】批量添加MathType公式编号
  • [Linux]磁盘分区及swap交换空间
  • 第38节:PyTorch模型训练流程详解