尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
千问    LeetCode 307.区域和检索 - 数组可修改 Java实现
LeetCode 307 题「区域和检索 - 数组可修改」是一道经典的数据结构设计题要求实现一个类支持单点更新和区间求和两种操作。为什么不能用普通前缀和如果使用前缀和数组sumRange 查询是 O(1)但 update 更新一个元素后需要 O(n) 时间更新所有后续的前缀和。本题中更新和查询操作频繁交替最坏情况下会达到 O(n²)因此需要用更高效的数据结构。核心解法树状数组 (Binary Indexed Tree)树状数组是最推荐的解法代码短、常数小、效率高。它利用二进制分解的思想将前缀和拆分为若干子区间使得更新和查询都达到 O(log n) 的时间复杂度。核心操作· lowbit(i) i (-i)取最低位的 1 及其后面的 0· 更新从 i 开始不断 i lowbit(i)修改对应节点· 查询前缀和从 i 开始不断 i - lowbit(i)累加对应节点· 区间和sumRange(l, r) query® - query(l-1)Python 实现classNumArray:def__init__(self,nums):self.nlen(nums)self.numsnums[:]self.tree[0]*(self.n1)fori,numinenumerate(nums):self._add(i1,num)def_add(self,i,delta):whileiself.n:self.tree[i]delta ii(-i)def_prefix_sum(self,i):s0whilei0:sself.tree[i]i-i(-i)returnsdefupdate(self,index,val):deltaval-self.nums[index]self.nums[index]val self._add(index1,delta)defsumRange(self,left,right):returnself._prefix_sum(right1)-self._prefix_sum(left)Java 实现模板可直接背诵classNumArray{int[]tree;int[]nums;intn;publicNumArray(int[]nums){this.nnums.length;this.numsnums.clone();this.treenewint[n1];for(inti0;in;i){add(i1,nums[i]);}}privateintlowbit(intx){returnx-x;}privatevoidadd(inti,intdelta){while(in){tree[i]delta;ilowbit(i);}}privateintquery(inti){intans0;while(i0){anstree[i];i-lowbit(i);}returnans;}publicvoidupdate(intindex,intval){intdeltaval-nums[index];nums[index]val;add(index1,delta);}publicintsumRange(intleft,intright){returnquery(right1)-query(left);}}其他解法线段树 (Segment Tree)每个节点维护一个区间的和更新和查询也是 O(log n)。功能比树状数组更强但代码更长、常数更大。本题用树状数组即可线段树作为拓展了解。分块 (Sqrt Decomposition)将数组分成若干块每块维护块内和。update 为 O(1)更新元素和块和sumRange 为 O(√n)。适合作为简单易懂的替代方案但效率不如树状数组。复杂度对比方法 update sumRange 代码量前缀和 O(n) O(1) 短树状数组 O(log n) O(log n) 短线段树 O(log n) O(log n) 长分块 O(1) O(√n) 中等总结本题优先选择树状数组它是「单点修改 区间求和」场景下的标准最优解。建议将树状数组的模板背熟遇到类似题目可以直接套用。
RELATED

相关推荐

UE5 UMG图表插件实战:纯C++绘制曲线、饼图、环状图与柱状图

UE5 UMG图表插件实战:纯C++绘制曲线、饼图、环状图与柱状图

简介:这是一款面向Unreal Engine5开发者的UMG图表控件插件,专为游戏与虚拟现实项目提供纯UMG实现的数据可视化方案,无需WebBrowser或WebUI嵌套,通过C与蓝图即可完成图表搭建。插件覆盖曲线图、饼图、环状图与柱状图四类常用图表&a…

📅 2026/10/12 6:22:44
零基础实战Vibe Coding:普通人用AI从0到1做出小工具

零基础实战Vibe Coding:普通人用AI从0到1做出小工具

最近一年被问得特别多的一句话是:"我完全没写过代码,现在让 AI 帮我做个小工具,到底靠不靠谱?"以前听到这种问题,我一般会说你先去补点基础再谈。但这两年 Vibe Coding 这个概念火起来以后,我的答…

📅 2026/10/12 6:22:44
从Pi到DSH:Agent Harness如何实现自生长与经验进化

从Pi到DSH:Agent Harness如何实现自生长与经验进化

1. 从"能插拔"到"会进化":Agent Harness 到底在解决什么问题如果你最近在折腾 AI Agent 相关的东西,大概率会碰到一个很尴尬的局面:模型能力明明够用,但整个系统跑起来就是"死板"。加一个新工具要改…

📅 2026/10/12 6:22:44
MORE NEWS

更多资讯

📰

从问答助手到执行Agent:AI编程的质变与实战指南

1. 先搞懂:AI Agent凭什么能当"博学多才的实习生"如果你最近关注编程领域,一定被"AI Coding""Agentic Coding"这类词刷过屏。但我发现很多人其实没搞明白一件事:AI Agent和我们在用的代码补全、聊天问答&#…

📰

Claude Code Mod定制全攻略:从配置到自定义命令与钩子脚本

如果你已经装了Claude Code并且觉得它的默认行为不够顺手,大概率会产生一个念头:能不能把它改了?能,而且可改的空间比你想的大不少。这篇文章讲的是Claude Code Mod——从零把官方版本装好,再用配置、指令文件、自定义…

📰

把AI Agent当成实习生来带:任务拆解、配置与代码审查实战指南

1. AI Agent到底是什么,为什么说它像实习生把AI Agent比作一个超级聪明、博学多才的实习生,这句话我在给团队做内部分享时说了不下十次。刚听到“AI Agent”的开发者,容易把它想象成科幻片里的万能机器人,或者觉得它只是高级一点的…

📰

ComfyUI本地部署与工作流搭建指南:从零到手把手配置

用了ComfyUI一段时间的人,很多当初是从开箱即用的工具转过来的,最头疼的通常是三件事:本地部署、环境配置、工作流搭建。说实话,ComfyUI的安装门槛确实比那些一键整合包高一点,可一旦你跨过这道坎,收获的不…

📰

软件测试用例设计方法详解:从需求拆解到接口用例实践

1. 需求拆解:用例设计的真正起点,不是点开word套模板很多同学问我:用例设计最难的地方在哪?我一般会反问一句:你接到任务之后,是先打开模板还是先看需求?如果你的手指下意识点了“新建用例”的按…

📰

四臂PEG-NH₂:星形聚乙二醇氨基的结构、偶联与水凝胶应用

做PEG化研究这些年,我一度觉得“聚乙二醇衍生物”这几个字已经被各种综述讲透了。直到一次做蛋白偶联实验,手里的线性mPEG-NH₂只有两个端基,想同时挂上靶向肽、药物分子和荧光探针,不得不引出好几步连接反应,路线绕得…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬