LeetCode 307. 区域和检索 - 数组可修改(树状数组)

1. 题目

给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。

update(i, val) 函数可以通过将下标为 i 的数值更新为 val,从而对数列进行修改。

示例:
Given nums = [1, 3, 5]
sumRange(0, 2) -> 9
update(1, 2)
sumRange(0, 2) -> 8说明:
数组仅可以在 update 函数下进行修改。
你可以假设 update 函数与 sumRange 函数的调用次数是均匀分布的。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/range-sum-query-mutable
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似题目:LeetCode 303. 区域和检索 - 数组不可变(前缀和)

2.1 常规前缀和

class NumArray {int *sum = NULL;int n;
public:NumArray(vector<int>& nums) {if(nums.empty())return;n = nums.size();sum = new int [n];sum[0] = nums[0];for(int i = 1; i < nums.size(); ++i)sum[i] = sum[i-1]+nums[i];}void update(int i, int val) {if(!sum)return;int differ;if(i == 0)differ = val-sum[i];elsediffer = val-(sum[i]-sum[i-1]);for(int k = i; k < n; ++k)sum[k] += differ;}int sumRange(int i, int j) {if(!sum)return 0;if(i != 0)return sum[j]-sum[i-1];return sum[j];}
};

236 ms 18.9 MB

2.2 树状数组

  • 参考:树状数组介绍,降低更新复杂度为 log⁡n\log nlogn
class NumArray {vector<int> v;vector<int> copy;int N;
public:NumArray(vector<int>& nums) {N = nums.size();v.resize(N+1,0);//树状数组要求下标从1开始copy.resize(N+1,0);for(int i = 0; i < N; ++i)update(i,nums[i]);}void update(int i, int val) {int delta = val-copy[i+1];copy[i+1] += delta;i++;for( ;i <= N; i+= lowbit(i))v[i] += delta;}int sumRange(int i, int j) {return getsum(j)-getsum(i-1);}int getsum(int i){int ans = 0;i++;for(; i > 0; i-= lowbit(i))ans += v[i];return ans;}//树状数组int lowbit(int m){return m&(-m);}
};

60 ms 18.8 MB

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

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

相关文章

python地理_【Python教程】地理可视化

Matplotlib是Python常用的数据绘制包&#xff0c;其绘图功能强大&#xff1b;而Basemap则是Matplotlib的一个子包&#xff0c;负责地图绘制。本文简单介绍如何利用该程序包绘制风向图。具体操作如下&#xff1a;导入命令1)设置工作环境并导入程序包%cd "F:\\Dropbox\\pyth…

部署windows服务

写好了windows服务以后&#xff0c;再切换到设计页面&#xff0c;右键点击添加安装程序&#xff0c;点击后自动给你添加上一个安装组件&#xff0c;再设置下serviceProcessInstaller1组件的属性&#xff08;在设计器中设置&#xff0c;不在代码中&#xff09;&#xff0c;其中有…

LeetCode 327. 区间和的个数(multiset二分查找/归并排序)

文章目录1. 题目2. 解题2.1 动态规划超时2.2 二分查找2.3 归并排序1. 题目 给定一个整数数组 nums&#xff0c;返回区间和在 [lower, upper] 之间的个数&#xff0c;包含 lower 和 upper。 区间和 S(i, j) 表示在 nums 中&#xff0c;位置从 i 到 j 的元素之和&#xff0c;包…

AcWing之二维数组的查找

题目 在一个二维数组中&#xff0c;每一行都按照从左到右递增的顺序排序&#xff0c;每一列都按照从上到下递增的顺序排序。 请完成一个函数&#xff0c;输入这样的一个二维数组和一个整数&#xff0c;判断数组中是否含有该整数。样例 输入数组&#xff1a; [ [1,2,8,9]&…

sql server排序慢_SQL 查询调优之 where 条件排序字段以及 limit 使用索引的奥秘

(给数据分析与开发加星标&#xff0c;提升数据技能)作者&#xff1a;风过无痕-唐www.cnblogs.com/tangyanbo/p/6378741.html奇怪的慢sql我们先来看2条sql第一条&#xff1a;select * from acct_trans_log WHERE acct_id 1000000000009000757 order by create_time desc limit…

fedora10完全配置文档连接网址

code.google.com/p/fedora-zh/downloads/list 转载于:https://www.cnblogs.com/glc400/archive/2008/12/20/4473856.html

LeetCode 326. 3的幂

1. 题目 给定一个整数&#xff0c;写一个函数来判断它是否是 3 的幂次方。 示例 1: 输入: 27 输出: true示例 2: 输入: 0 输出: false示例 3: 输入: 9 输出: true示例 4: 输入: 45 输出: false进阶&#xff1a; 你能不使用循环或者递归来完成本题吗&#xff1f;来源&#xff…

ps抠头发插件_彻底告别抠图的烦恼!PS自动抠图超级插件Topaz ReMask大放送

我们经常需要对各种图片进行抠图&#xff0c;虽然抠图方法很多&#xff0c;但是我们却要花费很长的时间&#xff0c;这无疑来说效率非常不高。有没有一款PS插件可以快速对照片进行抠图&#xff1f;并且可以达到自己理想的效果&#xff1f;当然是有的&#xff0c;今天米朵就送给…

AcWing之找替换空格

题目 请实现一个函数&#xff0c;把字符串中的每个空格替换成"%20"。 你可以假定输入字符串的长度最大是1000。 注意输出字符串的长度可能大于1000。样例 输入&#xff1a;"We are happy."输出&#xff1a;"We%20are%20happy."方法一&#xff…

VC++中忽略所有默认库纯Win32 API编译及链接 - 计算机软件编程 - Wangye's Space

原始链接&#xff1a;VC中忽略所有默认库纯Win32 API编译及链接 - 计算机软件编程 - Wangyes Space 我们在用VC编写Windows程序的时候可能会发现一般可执行体&#xff08;.EXE&#xff09;的文件体积都比较大&#xff0c;于是非常羡慕那些使用Win32汇编编写程 序的人&#xff0…

LeetCode 345. 反转字符串中的元音字母

1. 题目 编写一个函数&#xff0c;以字符串作为输入&#xff0c;反转该字符串中的元音字母。 示例 1: 输入: "hello" 输出: "holle"示例 2: 输入: "leetcode" 输出: "leotcede"说明: 元音字母不包含字母"y"。来源&#xf…

python list存储对象_《python解释器源码剖析》第4章--python中的list对象

4.0 序python中的list对象&#xff0c;底层对应的则是PyListObject。如果你熟悉C&#xff0c;那么会很容易和C中的list联系起来。但实际上&#xff0c;这个C中的list大相径庭&#xff0c;反而和STL中的vector比较类似4.1 PyListObject对象我们知道python里面的list对象是支持对…

AcWing之从尾到头打印链表

题目 输入一个链表的头结点&#xff0c;按照 从尾到头 的顺序返回节点的值。 返回的结果用数组存储。样例 输入&#xff1a;[2, 3, 5] 返回&#xff1a;[5, 3, 2]方法一&#xff1a; /* struct ListNode {int val; //当前结点的值ListNode *next; //指向下一个结点的指针L…

javascript 打开新窗口

一、window.open()支持环境&#xff1a; JavaScript1.0/JScript1.0/Nav2/IE3/Opera3 二、基本语法&#xff1a;window.open(pageURL,name,parameters) 其中&#xff1a;pageURL 为子窗口路径 name 为子窗口句柄 parameters 为窗口参数(各参数用逗号分隔) 三、示例&#xff1a;…

python修改mac地址_python利用_winreg模块制作MAC地址修改工具

通过百度搜索知道&#xff0c;xp下修改MAC地址的方法主要有两个&#xff0c;一种是通过配置本地链接属性来实现&#xff0c;这种方法不适合用程序来完成&#xff0c;另一种是通过修改注册表来完成&#xff0c;本程序主要是利用了这种方法。具体方法&#xff1a;Windows 2000/XP…

我们为什么需要工作流

我们为什么需要工作流 这是我的"基于WF设计业务流程平台"的题外篇 以下是这系列的文章列表,写的很痛苦,但我会继续写下去 基于WF设计业务流程平台-架构 基于WF设计业务流程平台-权限体系 基于WF设计业务流程平台_特定群体与特定人 基于WF设计业务流程平台_参与者与任…

LeetCode 371. 两整数之和(位运算加法)

1. 题目 不使用运算符 和 - ​​​​​​​&#xff0c;计算两整数 ​​​​​​​a 、b ​​​​​​​之和。 示例 1: 输入: a 1, b 2 输出: 3示例 2: 输入: a -2, b 3 输出: 1来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcod…

python函数方法里面用浅复制深复制_图解 Python 浅拷贝与深拷贝

Python 中的赋值语句不会创建对象的拷贝&#xff0c;仅仅只是将名称绑定至一个对象。对于不可变对象&#xff0c;通常没什么差别&#xff0c;但是处理可变对象或可变对象的集合时&#xff0c;你可能需要创建这些对象的 “真实拷贝”&#xff0c;也就是在修改创建的拷贝时不改变…

32位Windows系统未分页内存限制导致的VPS的容量问题

问题 32位Windows系统未分页内存限制导致的VPS的容量问题 解决方案 在32位的Windows系统上&#xff0c;制约VPS的数量的主要参数是“未分页内存” 打开Windows自己的任务管理器&#xff0c;选择性能标签&#xff0c;查看“核心内存”&#xff0c;查看“未分页” 在32位的windo…

AcWing之重建二叉树

题目 输入一棵二叉树前序遍历和中序遍历的结果&#xff0c;请重建该二叉树。 注意:二叉树中每个节点的值都互不相同&#xff1b;输入的前序遍历和中序遍历一定合法&#xff1b;样例 给定&#xff1a; 前序遍历是&#xff1a;[3, 9, 20, 15, 7] 中序遍历是&#xff1a;[9, 3, …