leetcode Range Sum Query-Mutable
2016-09-01 16:26
309 查看
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
c485
to val.
Example:
思路:线段树,参见博客http://www.cnblogs.com/tanky_woo/archive/2010/09/25/1834523.html
代码基本上是构造线段树的过程,update更新线段树,代码:
The update(i,
val) function modifies nums by
updating the element at index i
c485
to val.
Example:
Given nums = [1, 3, 5] sumRange(0, 2) -> 9 update(1, 2) sumRange(0, 2) -> 8
思路:线段树,参见博客http://www.cnblogs.com/tanky_woo/archive/2010/09/25/1834523.html
代码基本上是构造线段树的过程,update更新线段树,代码:
public class NumArray { class segmenttreenode{ public segmenttreenode(int start,int end){ this.start=start; this.end=end; } int sum; segmenttreenode left; segmenttreenode right; int start; int end; } segmenttreenode root=null; public NumArray(int[] nums) { root=buildTree(nums,0,nums.length-1); } public segmenttreenode buildTree(int[] nums,int begin,int end){ if(begin>end) return null; segmenttreenode root=new segmenttreenode(begin,end); if(begin==end) root.sum=nums[begin]; else{ int mid=begin+(end-begin)/2; root.left=buildTree(nums,begin,mid); root.right=buildTree(nums,mid+1,end); root.sum=root.left.sum+root.right.sum;} return root; } void update(int i, int val) { updateVal(root,i,val); } public void updateVal(segmenttreenode root,int i,int val){ if(root.start==root.end) root.sum=val; else { int mid = root.start + (root.end - root.start) / 2; if (i <= mid) updateVal(root.left, i, val); else updateVal(root.right, i, val); root.sum = root.left.sum + root.right.sum; } } public int sumRange(int i, int j) { return getSum(root,i,j); } public int getSum(segmenttreenode root,int i,int j){ if(root.start==i&&root.end==j) return root.sum; int mid=root.start+(root.end-root.start)/2; if(i>=mid+1) return getSum(root.right,i,j); else if(j<=mid) return getSum(root.left,i,j); else return getSum(root.left,i,mid)+getSum(root.right,mid+1,j); } }
相关文章推荐
- [LeetCode]Range Sum Query - Mutable
- LeetCode 307. Range Sum Query - Mutable
- Leetcode 307. Range Sum Query - Mutable (Python)
- [LeetCode] Range Sum Query 2D - Mutable 二维区域和检索 - 可变
- LeetCode 307 Range Sum Query - Mutable(范围和查询-可变)
- [LeetCode] Range Sum Query - Mutable 区域和检索 - 可变
- Leetcode 303. Range Sum Query - Immutable & 307. Range Sum Query - Mutable
- [LeetCode308]Range Sum Query 2D - Mutable
- LeetCode 307. Range Sum Query - Mutable(区间之和)
- leetcode笔记:Range Sum Query - Mutable
- Leetcode (307) Range Sum Query - Mutable
- Leetcode: Range Sum Query - Mutable && Summary: Segment Tree
- leetcode之Range Sum Query - Mutable
- (LeetCode 307) Range Sum Query - Mutable(Segment Tree)
- leetcode -- Range Sum Query - Mutable -- 重点,有线段树
- leetcode_307.Range Sum Query - Mutable ? 待解决
- Leetcode: Range Sum Query - Mutable
- [LeetCode][JavaScript]Range Sum Query - Mutable
- Range Sum Query - Mutable -leetcode
- LeetCode 307. Range Sum Query - Mutable