LeetCode *** 307. Range Sum Query - Mutable (Binary Indexed Trees)
2016-04-27 10:34
453 查看
题目:
Given an integer array nums, find the sum of the elements between indicesi and
j (i ≤ j), inclusive.
The update(i, val) function modifies nums by updating the element at indexi to
val.
Example:
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.
分析:
代码:
Given an integer array nums, find the sum of the elements between indicesi and
j (i ≤ j), inclusive.
The update(i, val) function modifies nums by updating the element at indexi 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.
分析:
代码:
class NumArray { public: vector<int> record, tree; NumArray(vector<int> &nums) { int size = nums.size(), idx; record = nums; record.insert(record.begin(), 0); tree = vector<int>(size + 1, 0); for (int i = 1; i <= size; ++i) { idx = i - (i&-i) + 1; for (int j = idx; j <= i; ++j) tree[i] += record[j]; } } void update(int i, int val) { int differ = val- record[i + 1], idx = i + 1; record[i + 1] = val; while (idx<record.size()) { tree[idx] += differ; idx += (idx&-idx); } } int sumRange(int i, int j) { int sum1 = 0,sum2=0, idx = i,jdx=j+1; while (idx>0||jdx>0) { if (idx > 0) { sum1 += tree[idx]; idx -= (idx&-idx); } if (jdx > 0) { sum2 += tree[jdx]; jdx -= (jdx&-jdx); } } return sum2-sum1; } };
相关文章推荐
- 华工校赛 F. Bracket Sequence
- hdu1159Common Subsequence(动态规划之最长公共子序列)
- UI组件
- setAccessible(true)
- ThreadPoolExecutor使用和思考(上)-线程池大小设置与BlockingQueue的三种实现区别
- APUE阅读笔记(九)——进程关系
- 实现Easyui 可编辑表格
- 线程----BlockingQueue (转)
- Missing Value Treatment
- CarPlay wired连接与wireless连接相互切换
- requireJS使用指南
- iOS开发总结之UIScrollView主要属性
- APUE阅读笔记(十)——信号
- easyui DataGrid 的 Checkbox 选择多行
- UITextField 的使用
- 重载CBCGPRibbonBar,去掉Quick Access toolbar
- 详解iOS中UIView的layoutSubviews子视图布局方法使用
- mysql No operations allowed after connection closed.Connection was implicitly closed due to underly
- 开发Vue树形组件
- Android异步线程,Looper, MessageQueue