lintcode-medium-Segment Tree Query
2016-04-05 17:55
459 查看
For an integer array (index from 0 to n-1, where n is the size of this array), in the corresponding SegmentTree, each node stores an extra attribute
Design a
Example
For array
query(root, 1, 1), return
query(root, 1, 2), return
query(root, 2, 3), return
query(root, 0, 2), return
maxto denote the maximum number in the interval of the array (index from start to end).
Design a
querymethod with three parameters
root,
startand
end, find the maximum number in the interval [start, end] by the given root of segment tree.
Example
For array
[1, 4, 2, 3], the corresponding Segment Tree is:
[0, 3, max=4] / \ [0,1,max=4] [2,3,max=3] / \ / \ [0,0,max=1] [1,1,max=4] [2,2,max=2], [3,3,max=3]
query(root, 1, 1), return
4
query(root, 1, 2), return
4
query(root, 2, 3), return
3
query(root, 0, 2), return
4
/** * Definition of SegmentTreeNode: * public class SegmentTreeNode { * public int start, end, max; * public SegmentTreeNode left, right; * public SegmentTreeNode(int start, int end, int max) { * this.start = start; * this.end = end; * this.max = max * this.left = this.right = null; * } * } */ public class Solution { /** *@param root, start, end: The root of segment tree and * an segment / interval *@return: The maximum number in the interval [start, end] */ public int query(SegmentTreeNode root, int start, int end) { // write your code here if(start > end || end < root.start || start > root.end) return 0; if(root.start == start && root.end == end) return root.max; int leftmax = Integer.MIN_VALUE; int rightmax = Integer.MIN_VALUE; int mid = root.start + (root.end - root.start) / 2; if(start <= mid){ if(end <= mid){ leftmax = query(root.left, start, end); } else{ leftmax = query(root.left, start, mid); } } if(end > mid){ if(start > mid){ rightmax = query(root.right, start, end); } else{ rightmax = query(root.right, mid + 1, end); } } return Math.max(leftmax, rightmax); } }
相关文章推荐
- What's the difference between all the Selection Segues?
- 【iOS】UILabel多行文本的高度计算
- lintcode-medium-Segment Tree Build II
- lintcode-medium-Segment Tree Build
- Material Design UI Widgets —— Palette 调色板
- 大作业关于(“有爱”youi)的简介
- mysql5中大数据错误:Packet for query is too large (1117260 > 1048576). You can change this value on the ser
- 将UIDatePicker的日期显示为数字和中文
- Material Design UI Widgets —— CardView 卡片视图
- CodeForces 618B-Guess the Permutation【搜索】
- NSURLConnection的sendAsynchronousRequest
- iOS开发学习笔记——控制器(UIViewController)
- HDU 1242 Rescue dfs
- [ios] dispatch_get_main_queue 的同步异步问题
- Meterial Design UI Widgets —— RecyclerView 循环视图
- Android4.4 Systemui状态栏状态图标更新流程分析
- LeetCode 63 - Unique Paths II
- UITableView的section header view悬停的方法
- Nexus设置guest只访问指定artifact
- UIDynamic 物理动效