news 2026/5/16 11:11:37

LeetCode 线段树简介题解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 线段树简介题解

LeetCode 线段树简介题解

题目描述

介绍线段树(Segment Tree)的基本概念和原理。

线段树简介

什么是线段树

线段树是一种二叉树形数据结构,用于高效地处理区间查询和更新操作。它可以在 O(log n) 的时间内完成以下操作:

  1. 单点更新
  2. 区间查询
  3. 区间更新

基本原理

线段树的每个节点代表一个区间,根节点代表整个数组区间。每个节点的左右子节点分别代表该区间的左半部分和右半部分。

应用场景

  1. 区间和查询
  2. 区间最大值/最小值查询
  3. 区间更新

代码实现

class SegmentTree: def __init__(self, nums): self.n = len(nums) self.tree = [0] * (4 * self.n) self.build(1, 0, self.n - 1, nums) def build(self, node, l, r, nums): if l == r: self.tree[node] = nums[l] else: mid = (l + r) // 2 self.build(node * 2, l, mid, nums) self.build(node * 2 + 1, mid + 1, r, nums) self.tree[node] = self.tree[node * 2] + self.tree[node * 2 + 1] def update(self, node, l, r, idx, val): if l == r: self.tree[node] = val else: mid = (l + r) // 2 if idx <= mid: self.update(node * 2, l, mid, idx, val) else: self.update(node * 2 + 1, mid + 1, r, idx, val) self.tree[node] = self.tree[node * 2] + self.tree[node * 2 + 1] def query(self, node, l, r, ql, qr): if ql > r or qr < l: return 0 if ql <= l and r <= qr: return self.tree[node] mid = (l + r) // 2 return self.query(node * 2, l, mid, ql, qr) + self.query(node * 2 + 1, mid + 1, r, ql, qr) # 测试 def test_segment_tree(): nums = [1, 2, 3, 4, 5] st = SegmentTree(nums) print(st.query(1, 0, 4, 0, 2)) # 输出:6 st.update(1, 0, 4, 1, 10) print(st.query(1, 0, 4, 0, 2)) # 输出:16 if __name__ == "__main__": test_segment_tree()

总结

线段树是一种高效的数据结构,可以在 O(log n) 的时间内完成区间查询和更新操作。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/16 11:11:02

从PWM信号到精准控制:舵机驱动原理与多平台代码实战

1. 舵机控制的核心&#xff1a;PWM信号机制解析 第一次接触舵机时&#xff0c;我被它精准的角度控制能力震撼到了——这个小东西怎么能如此听话地停在指定位置&#xff1f;后来拆开外壳才发现&#xff0c;原来核心秘密藏在PWM信号里。PWM&#xff08;脉冲宽度调制&#xff09;…

作者头像 李华
网站建设 2026/5/16 11:10:43

在ComfyUI中开启AI视频生成新纪元:打造你的动态内容创作平台

在ComfyUI中开启AI视频生成新纪元&#xff1a;打造你的动态内容创作平台 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 想要将创意想法转化为生动的视频内容&#xff0c;却苦于复杂的AI视频生成…

作者头像 李华
网站建设 2026/5/16 11:08:26

API适配器实战:无缝切换Claude与ChatGPT,统一大模型调用接口

1. 项目概述&#xff1a;一个API适配器的诞生 最近在折腾大模型应用开发&#xff0c;发现一个挺有意思的现象&#xff1a;各家厂商的API接口设计&#xff0c;就像不同品牌的手机充电口&#xff0c;互不兼容。你为OpenAI的ChatGPT API写了一套调用逻辑&#xff0c;想切换到Anth…

作者头像 李华
网站建设 2026/5/16 11:08:13

告别EasyConnect连接失败:一份给Ubuntu新手的依赖库降级保姆级教程

Ubuntu系统依赖库降级实战&#xff1a;解决企业级软件兼容性问题 第一次在Ubuntu上安装企业级软件时遇到依赖库冲突&#xff0c;就像拿着新钥匙开老锁——明明型号对得上&#xff0c;就是转不动。这种挫败感我深有体会&#xff0c;特别是当你急着连入公司内网处理工作&#xff…

作者头像 李华
网站建设 2026/5/16 11:06:06

Java 异常处理:从“能跑就行“到“优雅规范“的进阶之路

Java 异常处理&#xff1a;从"能跑就行"到"优雅规范"的进阶之路摘要&#xff1a;在真实的 Java 开发中&#xff0c;异常处理往往是被忽视的角落。很多开发者只关心业务逻辑的实现&#xff0c;却忽略了代码的健壮性和可维护性。本文将结合真实工作场景&…

作者头像 李华