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

线段树---数据结构学习

线段树的教程可以参照线段树
这里推荐 https://oi-wiki.org/
这个网站,数据结构讲的非常透。
线段树学了很多次忘了很多次,这次打算记录一下以后方便回顾(leetcode这类题遇见的不算特别多)。
样板例题 leltcode-307

#题目样板
class NumArray {private int[] segmentTree;private int n;public NumArray(int[] nums) {n = nums.length;segmentTree = new int[nums.length * 4];build(0, 0, n - 1, nums);}public void update(int index, int val) {change(index, val, 0, 0, n - 1);}public int sumRange(int left, int right) {return range(left, right, 0, 0, n - 1);}private void build(int node, int s, int e, int[] nums) {if (s == e) {segmentTree[node] = nums[s];return;}int m = s + (e - s) / 2;build(node * 2 + 1, s, m, nums);build(node * 2 + 2, m + 1, e, nums);segmentTree[node] = segmentTree[node * 2 + 1] + segmentTree[node * 2 + 2];}private void change(int index, int val, int node, int s, int e) {if (s == e) {segmentTree[node] = val;return;}int m = s + (e - s) / 2;if (index <= m) {change(index, val, node * 2 + 1, s, m);} else {change(index, val, node * 2 + 2, m + 1, e);}segmentTree[node] = segmentTree[node * 2 + 1] + segmentTree[node * 2 + 2];}private int range(int left, int right, int node, int s, int e) {if (left == s && right == e) {return segmentTree[node];}int m = s + (e - s) / 2;if (right <= m) {return range(left, right, node * 2 + 1, s, m);} else if (left > m) {return range(left, right, node * 2 + 2, m + 1, e);} else {return range(left, m, node * 2 + 1, s, m) + range(m + 1, right, node * 2 + 2, m + 1, e);}}
}
http://www.lryc.cn/news/241385.html

相关文章:

  • linux基础5:linux进程1(冯诺依曼体系结构+os管理+进程状态1)
  • JVM-基础
  • Baidu Comate 基于百度文心一言的智能编码助手
  • 基本微信小程序的图书馆座位管理系统
  • 2023年亚太杯数学建模A题水果采摘机器人的图像识别功能(免费思路)
  • AWS CLI和EKSCTL的客户端设置
  • 分组背包问题学习笔记 AcWing 9. 分组背包问题
  • JSP EL 算数运算符逻辑运算符
  • ubuntu22.04 arrch64版在线安装node
  • 腾讯云轻量数据库开箱测评,1核1G轻量数据库测试
  • Linux安全之AIDE系统入侵检测工具安装和使用
  • 【Flink】状态管理
  • 《微信小程序开发从入门到实战》学习二十八
  • 2824. 统计和小于目标的下标对数目 : 详解 “左找右“ “右找左“ 两种方式
  • windows电脑定时开关机设置
  • 微信小程序取消自定义默认标题
  • Vue3鼠标拖拽生成区域块并选中元素
  • [深度理解] 重启 Splunk Search Head Cluster
  • Python + Docker 还是 Rust + WebAssembly?
  • [汇编实操]DOSBox工具: unable to open input file: 文件名.asm问题解决
  • Windows安装MongoDB
  • HandBrake 1.7 近日发布
  • Vue3的watch使用介绍及场景
  • Java设计原则和设计模式
  • webshell之基于框架免杀
  • QT QJsonObject 插入 QByteArray十六进制数据
  • 概要设计文档案例分享
  • 微服务qiankun通信方式
  • 【Azure 架构师学习笔记】-Azure Storage Account(7)- 权限控制
  • 听GPT 讲Rust源代码--src/tools(2)