热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

2022年4月4日LeetCode第307题详解与优化策略

在LeetCode第307题中,我们详细探讨了树状数组(FenwickTree)的应用及其优化策略。树状数组`tree`用于存储特定区间内的元素和,其中区间的左边界是当前索引的二进制表示中去掉最后一个1后再加1,右边界即为当前索引本身。此外,还维护了一个原始数组`nums`和一个表示数组长度的变量`N`。通过这些结构,我们可以高效地实现区间求和与单点更新操作。

private int[] tree;//树状数组,存储某个区间(左界为其二进制下标去掉最后的1再加上1,右界为本身)的和private int[] nums;//原数组private int N;//元素数量public NumArray(int[] nums) {N&#61;nums.length;this.nums&#61;nums;this.tree&#61;new int[N&#43;1];//0位置不用for (int i &#61; 0; i 0; i -&#61; lowbit(i))ans &#43;&#61; tree[i];return ans;}//在树状数组pos位置中增加值valvoid add(int pos, int val) {//对应的父节点也要加上valfor (int i &#61; pos; i <&#61; N; i &#43;&#61; lowbit(i))tree[i] &#43;&#61; val;}public void update(int idx, int val) {
add(idx&#43;1,val-nums[idx]);nums[idx]&#61;val;} public int sumRange(int left, int right) {
return query(right&#43;1) - query(left);}


推荐阅读
author-avatar
海边的石雨价_288
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有