307. Range Sum Query
来源:互联网 发布:c语言图书管理系统 编辑:程序博客网 时间:2024/06/06 01:40
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.
public class NumArray { class SegmentTreeNode { int start, end; int sum; SegmentTreeNode left, right; public SegmentTreeNode(int start, int end) { this.start = start; this.end = end; this.left = null; this.right = null; this.sum = 0; } } SegmentTreeNode root = null; public NumArray(int[] nums) { root = buildTree(nums, 0, nums.length-1); } public SegmentTreeNode buildTree(int[] nums, int start, int end) { if (start > end) return null; SegmentTreeNode ret = new SegmentTreeNode(start, end); if (start == end) ret.sum = nums[start]; else { int mid = (start + end) / 2; ret.left = buildTree(nums, start, mid); ret.right = buildTree(nums, mid+1, end); ret.sum = ret.left.sum + ret.right.sum; } return ret; } public void update(int i, int val) { update(root, i, val); } public void update(SegmentTreeNode root, int i, int val) { if (root.start == root.end) root.sum = val; else { int mid = (root.start + root.end) / 2; if (i <= mid) { update(root.left, i, val); }else { update(root.right, i, val); } root.sum = root.left.sum + root.right.sum; } } public int sumRange(int i, int j) { return sumRange(root, i, j); } public int sumRange(SegmentTreeNode root, int i, int j) { if (root.start == i && root.end == j) return root.sum; int mid = (root.start + root.end) / 2; if (j <= mid) return sumRange(root.left, i, j); else if (i >= mid+1) return sumRange(root.right, i, j); else return sumRange(root.left, i, mid) + sumRange(root.right, mid+1, j); }}/** * Your NumArray object will be instantiated and called as such: * NumArray obj = new NumArray(nums); * obj.update(i,val); * int param_2 = obj.sumRange(i,j); */
0 0
- 307. Range Sum Query
- 307. Range Sum Query
- 307. Range Sum Query
- 307. Range Sum Query
- 307. Range Sum Query
- 307. Range Sum Query
- 307. Range Sum Query
- 307. Range Sum Query - Mutable
- 307. Range Sum Query - Mutable
- 307. Range Sum Query - Mutable
- 307. Range Sum Query - Mutable
- 307. Range Sum Query - Mutable
- 307. Range Sum Query - Mutable
- 307. Range Sum Query - Mutable
- 307. Range Sum Query - Mutable**
- 307. Range Sum Query - Mutable
- 307. Range Sum Query - Mutable
- 307. Range Sum Query - Mutable.
- 关于adb
- 72. Edit Distance
- HDU 4876 ZCC loves cards
- ubuntu中配置samba方法
- CentOS中更改IPV4和IPV6地址以及路由
- 307. Range Sum Query
- 关于锁(悲观锁与乐观锁)
- 冒泡排序法
- 树莓派 忘记密码的解决方法
- Java基础之注解Annotation初入篇_雷惊风
- Eclipse xml 无自动提示
- ubuntu16.04英文环境下如何安装搜狗拼音
- webpack性能优化——DLL
- Ubuntu密码输入正确,桌面登陆不了