- 浏览: 185047 次
- 性别:
- 来自: 济南
文章分类
最新评论
Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive.
The update(i, val) function modifies nums by updating the element at index i to val.
Example:
Given nums = [1, 3, 5]
sumRange(0, 2) -> 9
update(1, 2)
sumRange(0, 2) -> 8
Note:
The array is only modifiable by the update function.
You may assume the number of calls to update and sumRange function is distributed evenly.
这道题目与Range Sum Query - Immutable这道题相比多了一个update方法,这样我们就没法通过提前计算好sum来提高运算速度了。在这里我们介绍一种新的数据结构来解决这道题——树状数组(Binary Indexed tree)。这里简单介绍一下如何构造一个树状数组。
假设 给定一个数组nums[]。sumRange方法求其中连续多个数的和,update方法用来任意修改其中一个元素。下面我们构造树状数组BIT[]。其中的任意一个元素BIT[i]可能是一个或者多个nums数组中元素的和。我们如何确定BIT[i]包含的元素呢,这里我们用位运算的知识来处理。假设i的二进制表示中有k位连续的0,那么它就是数组nums中下面小于i的前2^k个元素的和。
注 *构造BIT数组时,BIT[0] = 0,代表空,
例如:
BIT[1] = nums[0] (1的二进制表示为0001,k = 0, 2 ^ k = 1, 因此只包含nums[0]).
BIT[2] = nums[0] + nums[1] (2 = 0010, k = 1, 2 ^ k = 2, 因此包含前两个元素).
BIT[3] = nums[2] (3 = 0011, k = 0, 2 ^ k = 1, 因此只包含一个紧邻3并且比3小的元素nums[2])
构建好BIT,这道题目就解决了,时间复杂度为O(logn), 代码如下:
The update(i, val) function modifies nums by updating the element at index i to val.
Example:
Given nums = [1, 3, 5]
sumRange(0, 2) -> 9
update(1, 2)
sumRange(0, 2) -> 8
Note:
The array is only modifiable by the update function.
You may assume the number of calls to update and sumRange function is distributed evenly.
这道题目与Range Sum Query - Immutable这道题相比多了一个update方法,这样我们就没法通过提前计算好sum来提高运算速度了。在这里我们介绍一种新的数据结构来解决这道题——树状数组(Binary Indexed tree)。这里简单介绍一下如何构造一个树状数组。
假设 给定一个数组nums[]。sumRange方法求其中连续多个数的和,update方法用来任意修改其中一个元素。下面我们构造树状数组BIT[]。其中的任意一个元素BIT[i]可能是一个或者多个nums数组中元素的和。我们如何确定BIT[i]包含的元素呢,这里我们用位运算的知识来处理。假设i的二进制表示中有k位连续的0,那么它就是数组nums中下面小于i的前2^k个元素的和。
注 *构造BIT数组时,BIT[0] = 0,代表空,
例如:
BIT[1] = nums[0] (1的二进制表示为0001,k = 0, 2 ^ k = 1, 因此只包含nums[0]).
BIT[2] = nums[0] + nums[1] (2 = 0010, k = 1, 2 ^ k = 2, 因此包含前两个元素).
BIT[3] = nums[2] (3 = 0011, k = 0, 2 ^ k = 1, 因此只包含一个紧邻3并且比3小的元素nums[2])
构建好BIT,这道题目就解决了,时间复杂度为O(logn), 代码如下:
public class NumArray { int[] nums; int[] BIT; public NumArray(int[] nums) { this.nums = nums; BIT = new int[nums.length + 1]; for(int i = 0; i < nums.length; i++) { init(i, nums[i]); } } public void init(int i, int val) { i ++; while(i <= nums.length) { BIT[i] += val; i += (i & -i); } } void update(int i, int val) { int differ = val - nums[i]; nums[i] = val; init(i, differ); } public int getSum(int i) { i ++; int sum = 0; while(i > 0) { sum += BIT[i]; i -= (i & -i); } return sum; } public int sumRange(int i, int j) { return getSum(j) - getSum(i - 1); } } // Your NumArray object will be instantiated and called as such: // NumArray numArray = new NumArray(nums); // numArray.sumRange(0, 1); // numArray.update(1, 10); // numArray.sumRange(1, 2);
发表评论
-
498. Diagonal Traverse
2019-11-15 13:52 270Given a matrix of M x N eleme ... -
496 Next Greater Element I
2019-11-14 13:50 271You are given two arrays (witho ... -
Word Break II
2016-03-09 03:15 390Given a string s and a dictiona ... -
Insert Interval
2016-03-08 02:11 379Given a set of non-overlapping ... -
Merge Intervals
2016-03-07 05:25 504Given a collection of intervals ... -
Merge k Sorted Lists
2016-03-07 04:03 568Merge k sorted linked lists and ... -
Multiply Strings
2016-03-06 07:27 483Given two numbers represented a ... -
N-Queens II
2016-03-06 03:06 671Follow up for N-Queens problem. ... -
N-Queens
2016-03-06 02:47 473The n-queens puzzle is the prob ... -
First Missing Positive
2016-03-05 03:09 435Given an unsorted integer array ... -
Spiral Matrix
2016-03-04 03:39 584Given a matrix of m x n element ... -
Trapping Rain Water
2016-03-04 02:54 592Given n non-negative integers r ... -
Repeated DNA Sequences
2016-03-03 03:10 429All DNA is composed of a series ... -
Increasing Triplet Subsequence
2016-03-02 02:48 906Given an unsorted array return ... -
Maximum Product of Word Lengths
2016-03-02 01:56 935Given a string array words, fin ... -
LRU Cache
2016-02-29 10:37 607Design and implement a data str ... -
Super Ugly Number
2016-02-29 07:07 694Write a program to find the nth ... -
Longest Increasing Path in a Matrix
2016-02-29 05:56 860Given an integer matrix, find t ... -
Coin Change
2016-02-29 04:39 791You are given coins of differen ... -
Minimum Height Trees
2016-02-29 04:11 725For a undirected graph with tre ...
相关推荐
java java_leetcode题解之Range Sum Query - Mutable.java
java java_leetcode题解之Range Sum Query 2D - Mutable.java
"Laravel开发-eloquence-mutable"项目就是为了这样的目的而设计的,它为Eloquent添加了更多实用特性,提高了ORM的灵活性和实用性。 1. **可搜索性**: eloquence-mutable扩展增强了Eloquent模型的搜索功能。它允许...
LeetCode - 307. Range Sum Query - Mutable例题:题目:树状数组代码:// 树状数组中求和的数组//真实存放数据的数组pr
Range Sum Query - Mutable **知识点:** - **问题描述:** - 给定一个可修改的整数数组,需要支持高效查询任意两个索引之间的元素之和,并且支持单个元素的更新。 - **解决方案分析:** - **线段树:** - ...
201 | [Bitwise AND of Numbers Range](https://leetcode.com/problems/bitwise-and-of-numbers-range/) | [C++](./C++/bitwise-and-of-numbers-range.cpp) [Python](./Python/bitwise-and-of-numbers-range.py) | _...
npm install react-mutable-list 功能以三种不同的方式公开: src/ es6 / jsx文件 在lib/具有commonJS导出的es5文件 一个预打包的版本,其中整个React库位于dist/list.js 例子 此示例显示用户如何处理onReorder和...
"range-sum-query-mutable.py"涉及动态规划和区间查询。在动态规划中,我们需要设计一个数据结构,能够支持快速的区间求和和修改操作。Python的列表和动态规划思想结合,可以实现高效的数据结构设计,为这类问题提供...
这时,就可以使用mutable关键字。mutable是C++中用于标示某个成员变量可以被const成员函数修改的修饰符。即使该对象为常量,我们仍然可以修改这个成员变量的值。以下是关于C++中mutable用法的详细知识点。 1. **...
易变的环境,适用于Mutable Instruments模块黑客 该配置文件和此shellscript创建了一个Linux(ubuntu)虚拟机,该虚拟机配置有用于编译和安装Mutable Instruments模块的固件的所有正确工具。 荣誉和灵感 Adafruit的 ...
C++中修饰数据可变的关键字有三个:const、volatile和mutable。const比较好理解,表示其修饰的内容不可改变(至少编译期不可改变),而volatile和mutable恰好相反,指示数据总是可变的。mutable和volatile均可以和...
Lesson 24 - Mutable and immutable objects Lesson 25 - Working with lists Lesson 26 - Advanced operations with lists Lesson 27 - Dictionaries as maps between objects Lesson 28 - Aliasing and copying ...
mutable-dev-environment, 可变仪器产品固件的开发环境 用于静音仪器模块黑客的环境这个配置文件和shellscript创建了一个配置了所有正确工具来编译和安装可变仪表模块模块的Linux ( ubuntu ) 虚拟机。的荣誉和灵感...
npm install -g mutable-template 您可能需要使用sudo运行命令(在Linux / OS X上)或以管理员身份运行命令提示符(在Windows上)。 用法 命令行工具 输入以下命令以查看可变模板的CLI使用情况。 $ mutable-...
Shruthi XT机箱 我的木制Shruthi XT外壳的设计和零件,可以选择在激光上雕刻有灵感源自原始设计的图形。 零件设计为在CNC铣床上粗切,然后手工精加工和修整。档案文件该计划最初是使用Mac版Eazydraw绘制的。...
Mutable Instruments Ambika的案例和面板文件 笔记: 已将Panel SVG文件设置为在svg2shenzhen扩展名的Inkscape中使用,以导出Gerber。 机箱+脸颊文件有两种类型,具体取决于在顶面板和主板之间使用的长度支架。 ...
在C++编程语言中,`mutable`是一个特殊的关键字,它的主要作用是允许在const成员函数内部修改对象的成员变量。通常,const成员函数承诺不修改对象的状态,但`mutable`关键字提供了一种机制,使得程序员可以在保持...
注意:该建议已在上游合并,在此不再进行更新。 WebAssembly的可变全球提案 ... 它旨在用于讨论,原型规范以及为WebAssembly添加可变全局变量的提案的实现。 有关建议的摘要,请参见。 该规范的格式版本(包括此建议...
资源分类:Python库 所属语言:Python 资源全名:torch_mutable_modules-1.1.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059