【LeetCode】每日一题 2023_11_13 区域和检索 - 数组可修改(树状数组/线段树)

文章目录

  • 刷题前唠嗑
    • 题目:区域和检索 - 数组可修改
    • 题目描述
    • 代码与解题思路
    • 偷看大佬题解
  • 结语

刷题前唠嗑


LeetCode? 启动!!!

今天是中等题,貌似挺简单的,先试试水

题目:区域和检索 - 数组可修改

题目链接:307. 区域和检索 - 数组可修改

题目描述

代码与解题思路

type NumArray struct {
    arr []int
}


func Constructor(nums []int) NumArray {
    return NumArray { arr: nums }
}


func (this *NumArray) Update(index int, val int)  {
    this.arr[index] = val
}


func (this *NumArray) SumRange(left int, right int) (ans int) {
    for _, v := range this.arr[left:right+1] {
        ans += v
    }
    return ans
}


/**
 * Your NumArray object will be instantiated and called as such:
 * obj := Constructor(nums);
 * obj.Update(index,val);
 * param_2 := obj.SumRange(left,right);
 */

难道真这么简单?

超时了。。。

难道需要用前缀和?失败。。

偷看大佬题解

啊?这是中等题?我真是晕倒了,树状数组。。。

但没办法,我就马上现学了一下树状数组是什么,树状数组的模板是什么样的,然后对照着别人的题解套用了一下,新知识+1:树状数组,具体的证明没看懂,但是模板学个差不多就行了,下次再遇到就下次再说

至于前几天的线段树和并查集,我到时候也抽时间学一下,争取下一次遇到至少要能看的懂题解才行,可不能遇到一次就 CV 一次。。。

type NumArray struct {
    nums []int
    tree []int
}


func Constructor(nums []int) NumArray {
    this := NumArray{make([]int, len(nums)), make([]int, len(nums)+1)}
    for i, v := range nums {
        this.Update(i, v)
    }
    return this
}


func (this *NumArray) Update(index int, val int)  {
    delta := val-this.nums[index]
    this.nums[index] = val
    for i := index+1; i < len(this.tree); i += i & -i {
        this.tree[i] += delta
    }
}

func (this *NumArray) prefixSum(i int) (s int) {
    for ; i > 0; i -= i & -i {
        s += this.tree[i]
    }
    return s
}


func (this *NumArray) SumRange(left int, right int) int {
    return this.prefixSum(right+1)-this.prefixSum(left)
}


/**
 * Your NumArray object will be instantiated and called as such:
 * obj := Constructor(nums);
 * obj.Update(index,val);
 * param_2 := obj.SumRange(left,right);
 */

树状数组还是很巧妙的,通过 logn 的复杂度查找到数组区间的和

结语

今日收获:初识树状数组

以后看到需要频繁查找数组区间和的题目就知道得用树状数组了。。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AMEYA360分析:炬玄智能高精准度、低相噪TCXO时钟补偿芯片

炬玄智能一款TCXO芯片JXT171和生产补偿系统成功通过应用测试&#xff0c;指标达到国际先进水平&#xff0c;实现该产品品类国内首家全国产化突破&#xff0c;为重点行业终端客户供应链保障续上关键一环。 1、典型应用 随着移动通信技术在我国得到广泛应用&#xff0c;蓬勃发展的…

一文读懂国内机械臂产业现状与未来发展趋势

原创 | 文 BFT机器人 机械臂是一种可以适用不同环境代替人类操作&#xff0c;执行任务的机器设备&#xff0c;通常由关节和臂段组成&#xff0c;是非常重要的工业自动化设备&#xff0c;能够帮助我们完成一些危险或复杂的任务。机械臂灵活、精准、高效的特点使其广泛应用于制造…

汽车OBD2蓝牙诊断仪解决方案程序开发

1、因TL718已经为你建立了物理层、数据链层和部分应用层的协议&#xff0c;所以只要OBD2标准应用层协议文本&#xff0c;ISO15031-5 或 SAE J1979&#xff08;这两个协议是相同的内容&#xff09;。 2、TL718诊断接口 1 套或用TL718芯片自建电路。3、家用PC机电脑一台。4、安…

Istio学习笔记-部署模型

参考&#xff1a;Istioldie 1.18 / 部署模型 当您将 Istio 用于生产环境部署时&#xff0c;需要确定一系列的问题。 网格将被限制在单个集群中还是分布在多个集群中&#xff1f; 是将所有服务都放置在单个完全连接的网络中&#xff0c;还是需要网关来跨多个网络连接服务&#…

WebSocket真实项目总结

websocket websocket是什么? websocket是一种网络通讯协议。 websocket 是HTML5开始提供的一种在单个TCP链接上进行全双工通讯的协议。 为什么需要websocket? 初次接触websocket&#xff0c;都会带着疑惑去学习&#xff0c;既然已经有了HTTP协议&#xff0c;为什么还需要另一…

【nlp】2.2 传统RNN模型

传统RNN模型 1 传统RNN模型1.1 RNN结构分析1.2 使用Pytorch构建RNN模型1.3 传统RNN优缺点1 传统RNN模型 1.1 RNN结构分析 结构解释图: 内部结构分析: 我们把目光集中在中间的方块部分, 它的输入有两部分, 分别是h(t-1)以及x(t), 代表上一时间步的隐层输出, 以及此时间步的…

BUUCTF 假如给我三天光明 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 下载附件&#xff0c;解压得到一个zip压缩包和一张.jpg图片。 密文&#xff1a; 解题思路&#xff1a; 其实做CTF题时&#xff0c;一定要紧紧的盯着那些明显的事物&#xff0c;优先解决它们&#xff0c;而不是浪…

振南技术干货集:深入浅出的Bootloader(1)

注解目录 1、烧录方式的更新迭代 1.1 古老的烧录方式 (怀旧一下&#xff0c;单片机高压烧录器。) 1.2 ISP 与ICP 烧录方式 (还记得当年我们玩过的 AT89S51?) 1.3 更方便的 ISP 烧录方式 1.3.1串口 ISP &#xff08;是 STC 单片机成就了我们&#xff0c;还是我们成就了…

Ulimit -系统资源配额配置说明

Linux 对于每个用户&#xff0c;系统限制其最大进程数&#xff0c;为提高性能&#xff0c;可以根据设备资源情况&#xff0c; 设置个Linux用户的最大进程数&#xff0c;一些需要设置为无限制&#xff1b; ulimit 参数说明 选项 含义 例子 -H 设置硬资源限制&#xff0c;一旦…

个体诊所电子处方系统设计,诊所电子处方模板,药店电子处方系统,佳易王电子处方管理系统V16.0下载

个体诊所电子处方系统设计&#xff0c;诊所电子处方模板&#xff0c;药店电子处方系统&#xff0c;佳易王电子处方管理系统V16.0下载 软件支持配方模板&#xff0c;病人病历记录查询等&#xff0c;软件打印处方单所用的纸张为 A5纸。软件可以下载试用&#xff0c;点击最下方官网…

道路交通仿真方案【SUMO + TraCI + Python】

“城市交通模拟”&#xff08;SUMO&#xff09;是一个开源、高度可移植、微观和连续的交通模拟包&#xff0c;旨在处理大型网络&#xff08;SUMO 文档&#xff09;。 TraCI 是“交通控制接口”模块的简称&#xff0c;它可以访问正在运行的道路交通模拟&#xff0c;以检索模拟对…

一文图解爬虫姊妹篇(spider)

—引导语 爬虫&#xff0c;没有一个时代比当前更重视它。一个好的爬虫似乎可以洞穿整个互联网&#xff0c;“来装满自己的胃”。 接上一篇&#xff1a;一文图解爬虫&#xff08;spider&#xff09; 博主已初步对爬虫的“五脏六腑”进行了解剖。虽然俗称“爬虫”&#xff0c;但窃…

3.3 Linux 文件管理

1、查看系统信息 tty 命令 描述&#xff1a;查看当前系统在哪个终端语法&#xff1a;tty Linux默认情况下提供6个虚拟终端来让用户登录&#xff0c;系统将F1~F6定义为tty1~tty6。 ctrlalt(F1~F6) &#xff1a;从图形界面切换到命令行界面的第 n 个虚拟终端&#xff08;F1 是…

VS Code二进制查阅插件Hex Editor(附ASCII表)

文章目录 Hex EditorASCII Hex Editor Hex Editor是一款强大的二进制读取插件&#xff0c;安装之后&#xff0c;可以直接把二进制文件拖入VS Code&#xff0c;然后点击仍然打开按钮&#xff0c;选择Hex Editor&#xff0c;就可以看到二进制数据了&#xff0c;效果如下 点击任何…

代码随想录算法训练营第五十三天 | LeetCode 1143. 最长公共子序列、1035. 不相交的线、53. 最大子数组和

代码随想录算法训练营第五十三天 | LeetCode 1143. 最长公共子序列、1035. 不相交的线、53. 最大子数组和 文章链接&#xff1a;最长公共子序列、不相交的线、最大子数组和 视频链接&#xff1a;最长公共子序列、不相交的线、最大子数组和 1. LeetCode 1143. 最长公共子序列 1…

LTspice导入spice模型

一、创建原理图&#xff08;原件的样子&#xff09; 1、下载spice模型 2、用LTspice打开spice模型 3、选中模型名称&#xff0c;选择创建 4、可以自己画模型 导入后都是方块的&#xff0c;可以自己画模型的样子&#xff0c;所有引脚和模型名称都跟器件一样可以移动 da 画模…

微服务系列-使用 RestTemplate 的 Spring Boot 微服务通信示例

公众号「架构成长指南」&#xff0c;专注于生产实践、云原生、分布式系统、大数据技术分享。 概述 下面我们将学习如何创建多个 Spring boot 微服务以及如何使用 RestTemplate 类在多个微服务之间进行同步通信。 微服务通信有两种风格&#xff1a; 同步通讯异步通信 同步通…

【C++初阶(六)】类和对象(中)与日期类的实现

本专栏内容为&#xff1a;C学习专栏&#xff0c;分为初阶和进阶两部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握C。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&…

如何挑选RPA开发商?

其实&#xff0c;只要在这个行业调查的时间足够&#xff0c;不难发现里面有很多弯弯绕绕。 首先&#xff0c;RPA厂商虽然很多&#xff0c;但是优秀的RPA厂商就那么几家&#xff0c;它们都有各自擅长的领域&#xff0c;像金智维&#xff0c;就是在金融领域、政务领域&#xff1…

【Python3】【力扣题】268. 丢失的数字

【力扣题】题目描述&#xff1a; 【Python3】代码&#xff1a; 1、解题思路&#xff1a;哈希。元素去重&#xff0c;依次判断是否在0-n内&#xff0c;没有则返回。 知识点&#xff1a;set(...)&#xff1a;转为集合&#xff0c;集合中的元素不重复。 class Solution:def mis…