【LeetCode:307. 区域和检索 - 数组可修改 | 树状数组 or 线段树】

news2024/9/23 13:18:51

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域新星创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述
在这里插入图片描述

🍔 目录

    • 🚩 题目链接
    • ⛲ 题目描述
    • 🌟 求解思路&实现代码&运行结果
      • ⚡ 线段树 or 树状数组
        • 🥦 求解思路
        • 🥦 实现代码
        • 🥦 运行结果
    • 💬 共勉

🚩 题目链接

  • 307. 区域和检索 - 数组可修改

⛲ 题目描述

给你一个数组 nums ,请你完成两类查询。

其中一类查询要求 更新 数组 nums 下标对应的值
另一类查询要求返回数组 nums 中索引 left 和索引 right 之间( 包含 )的nums元素的 和 ,其中 left <= right
实现 NumArray 类:

NumArray(int[] nums) 用整数数组 nums 初始化对象
void update(int index, int val) 将 nums[index] 的值 更新 为 val
int sumRange(int left, int right) 返回数组 nums 中索引 left 和索引 right 之间( 包含 )的nums元素的 和 (即,nums[left] + nums[left + 1], …, nums[right])

示例 1:

输入:
[“NumArray”, “sumRange”, “update”, “sumRange”]
[[[1, 3, 5]], [0, 2], [1, 2], [0, 2]]
输出:
[null, 9, null, 8]

解释:
NumArray numArray = new NumArray([1, 3, 5]);
numArray.sumRange(0, 2); // 返回 1 + 3 + 5 = 9
numArray.update(1, 2); // nums = [1,2,5]
numArray.sumRange(0, 2); // 返回 1 + 2 + 5 = 8

提示:

1 <= nums.length <= 3 * 104
-100 <= nums[i] <= 100
0 <= index < nums.length
-100 <= val <= 100
0 <= left <= right < nums.length
调用 update 和 sumRange 方法次数不大于 3 * 104

🌟 求解思路&实现代码&运行结果


⚡ 线段树 or 树状数组

🥦 求解思路

参考题解:关于各类「区间和」问题如何选择解决方案(含模板)

🥦 实现代码
class NumArray {

    int[] tree;

    int lowbit(int x){
        return x&-x;
    }

    // 查询前缀和的方法
    int query(int x){
        int ans=0;
        for(int i=x;i>0;i-=lowbit(i)) ans+=tree[i];
        return ans;
    }

    // 在树状数组x的位置上增加u
    void add(int x,int u){
        for(int i=x;i<=n;i+=lowbit(i)) tree[i]+=u;
    }

    int[] nums;
    int n;

    // 初始化「树状数组」,要默认数组是从 1 开始
    public NumArray(int[] nums) {
        this.nums=nums;
        this.n=nums.length;
        tree=new int[n+1];
        for(int i=0;i<n;i++) add(i+1,nums[i]);
    }
    
    public void update(int index, int val) {
        add(index+1,val-nums[index]);
        nums[index]=val;
    }
    
    public int sumRange(int left, int right) {
        return query(right+1)-query(left);
    }
}

/**
 * Your NumArray object will be instantiated and called as such:
 * NumArray obj = new NumArray(nums);
 * obj.update(index,val);
 * int param_2 = obj.sumRange(left,right);
 */
🥦 运行结果

在这里插入图片描述


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1201977.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设计必备:2023年最值得关注的8个素材网站!

如果你想学好平面设计&#xff0c;模仿和积累材料很重要&#xff0c;今天我们将与您分享一些常见的设计网站和材料下载网站。 1、即时设计 即时设计是专业的 UI 设计在线工具&#xff0c;内置丰富的设计素材&#xff0c;它可以被看作是一个设计素材网站。即时设计拥有来自于 …

SAP ABAP列表格式及表格输出

REPORT YTEST001. DATA wa LIKE spfli. WRITE: /. WRITE: 10航班承运人,40航班连接,60国家代码,80起飞城市,100起飞机场. SELECT * INTO wa FROM spfli.WRITE: / wa-carrid UNDER 航班承运人,wa-connid UNDER 航班连接,wa-countryfr UNDER 国家代码,wa-cityfrom UNDER 起飞城市…

“颠覆·挑战·极致”华瑞指数云ExponTech WDS新一代产品重新定义企业存储和数据架构

数字经济发展&#xff0c;离不开数据这一信息时代的“新能源”。当数据爆发式增长&#xff0c;企业何处寻得一款在性能和成本上皆具备良好表现的“储能仓”&#xff1f;国内数据存储领域领先厂商华瑞指数云ExponTech自主研发的高性能、高可靠的分布式存储产品ExponTech WDS成为…

Spring中Bean实例化方式和Bean生命周期

Spring Bean的实例化方式通过构造方法实例化通过简单工厂模式实例化通过工厂方法模式实例化通过FactoryBean接口实例化 注入自定义DateBean的生命周期Bean的循环依赖问题 Bean的实例化方式 Spring为Bean提供了多种实例化方式&#xff0c;通常包括4种方式。&#xff08;也就是说…

阿里全系产品崩上了热搜,我是有些失望的

双十一刚刚过&#xff0c;没想到阿里巴巴全系产品却又崩上热搜了。看来阿里的不少程序员同学今天又是在加班中度过了&#xff0c;心疼&#xff0c;希望你们把班加了就可以了&#xff0c;锅就别背了。 据了解&#xff0c;截至目前&#xff0c;本次修复进展如下&#xff1a; 17:…

SCADA系统在化工行业应用解决方案和注意事项

SCADA系统在化工行业的数字化工厂中具有广泛的应用解决方案。SCADA系统通过实时监控和远程控制&#xff0c;帮助化工企业实现生产过程的自动化和数字化管理。以下是化工行业的SCADA系统行业应用中可以解决的客户痛点以及相关的详细设计说明&#xff1a; 远程监测和控制&#xf…

GPON、XG(S)-PON基础

前言 本文主要介绍了GPON、XG(S)-PON中数据复用技术、协议、关键技术、组网保护等内容&#xff0c;希望对你有帮助。 一&#xff1a;GPON数据复用技术 下行波长&#xff1a;1490nm&#xff0c;上行波长&#xff1a;1310nm 1&#xff1a;单线双向传输&#xff08;WDM技术&am…

JS+ES6新增字符串方法大汇总,爆肝,共四十七种方法(求个赞,哈哈)

让我为大家介绍一下字符串的操作方法吧&#xff0c;你知道与不知道的大部分都在这&#xff01; 分类可能有点不太对&#xff0c;还请大家见谅&#xff01; 增 1.concat() 拼接字符串 可以连接两个或多个字符串 let str "hello"let str1 " str"console…

项目管理工具:提高团队协作效率,确保项目按时完成

项目管理对于企业的成功至关重要&#xff0c;一个好的项目管理工具可以提高团队协作效率&#xff0c;确保项目按时完成&#xff0c;并保持项目进度的高效跟踪。 近年来&#xff0c;一款名为“进度猫”的项目管理工具逐渐崭露头角&#xff0c;它以其独特的功能和优势&#xff…

算法细节类错误

1.使用全局变量时&#xff0c;若有多组测试数据 应该注意在循坏中重新初始化全局变量 例如&#xff1a;

【第2章 Node.js基础】2.4 Node.js 全局对象(一)

什么是Node.js 全局对象 对于浏览器引擎来说&#xff0c;JavaScript 脚本中的 window 是全局对象&#xff0c;而Node.js程序中的全局对象是 global&#xff0c;所有全局变量(除global本身外)都是global 对象的属性。全局变量和全局对象是所有模块都可以调用的。Node.is 的全局…

记忆科技携手中国电信,一站式存储打造坚实数字底座

11月10日&#xff0c;以“数字科技 焕新启航”为主题的2023数字科技生态大会在广州盛大开幕&#xff0c;本次大会由中国电信、广东省人民政府联合举办&#xff0c;是一场数字科技领域的年度盛会。忆联母公司记忆科技作为中国电信的合作伙伴之一受邀参会&#xff0c;深度参与了大…

常用的一些LDO芯片及使用稳定的LDO芯片推荐

LDO也是电赛中常用的电源模块。相比DCDC以及稳压器&#xff0c;LDO的跌落电压更小&#xff0c;因此两者适用场合不同。下面介绍一些常用的LDO及其使用&#xff1a; 1. TPS7A4501&#xff08;正降压&#xff09; 数据手册&#xff1a;https://www.ti.com.cn/cn/lit/ds/symlink…

【JUC】一、synchronized关键字与Lock接口

文章目录 1、JUC2、进程与线程3、并发与并行4、用户线程和守护线程5、对象锁和类锁6、Synchronized关键字7、synchronized案例8、Lock接口 1、JUC JUC&#xff0c;即java.util.concurrent这个处理线程的工具包&#xff0c;始于JDK1.5&#xff0c;其中下有三个包&#xff0c;为…

华为的干部管理和人才管理实践精髓(深度好文,收藏)

&#xff08;本文摘自谢宁专著《华为战略管理法&#xff1a;DSTE实战体系》&#xff0c;欢迎购买&#xff09; 1997年&#xff0c;在《华为基本法》的起草过程中&#xff0c;起草小组的一位人大教授问任正非:“任总&#xff0c;人才是不是华为的核心竞争力?”任正非的回答出人…

阿里三面被虐惨,非让我举例说明,为什么GC需要Stop the World?

最近&#xff0c;五哥回忆起4年前在蚂蚁金服三面的经历。关于GC的一个问题&#xff0c;让我记忆深刻。 当聊起来Java GC时&#xff0c;我提到 young gc 和 full gc都会 Stop the world。 ”为什么需要 Stop the world“&#xff0c;蚂蚁面试官问道。 我略微怔住&#xff0c;…

WH4530A可检测0-100cm环境光+距离检测功能

台湾旺泓推出的WH4530A是一款结合了先进环境光传感器&#xff08;ALS&#xff09;先进接近传感器&#xff08;PS&#xff09;和高效率的红外LED灯三合一为一体的光距感接近传感器&#xff1b;可测距范围0-100cm;采用I2C接口&#xff0c;可实现超高灵敏度、精准测距检测范围广等…

设备管理软件有什么用?如何让维修工作智能化?

随着数字化和人工智能技术的不断发展&#xff0c;设备管理软件已经成为了一种智能化的管理方式&#xff0c;它能够整合设备设施的维修资源&#xff0c;实现全生命周期的设备设施管理。这种软件可以帮助机构单位更好地跟踪和管理设备设施的维修请求&#xff0c;提高维修效率和管…

OA+CRM+HR+ERP 客户关系 进销存 财务 办公审批系统源码

功能介绍 1、个人中心 电话薄&#xff1a;主要用于添加联系人信息&#xff0c;相当于通讯录功能&#xff0c;可以存贮相关联系人的基本信息&#xff0c;姓名、联系方式、地址、邮箱等。 工作日志 &#xff1a;主要用于记录个人工作生活中大小事情的备忘&#xff0c;相当于备…

红队专题-从零开始VC++C/S远程控制软件RAT-MFC-超级终端

红队专题 招募六边形战士队员[16]超级终端(1) 招募六边形战士队员 一起学习 代码审计、安全开发、web攻防、逆向等。。。 私信联系 [16]超级终端(1) 服务端 — 本地打开cmd — 接收命令 — 执行 — 发送回显 客户端 — 远端发送命令 — 接收回显 发送开启cmd命令 --- 接受…