Segment Tree Query
来源:互联网 发布:淘宝论坛手机版在哪里 编辑:程序博客网 时间:2024/05/16 11:58
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 max
to denote the maximum number in the interval of the array (index from start to end).
Design a query
method with three parameters root
, start
and end
, find the maximum number in the interval [start, end] by the given root of segment tree.
Notice
It is much easier to understand this problem if you finished Segment Tree Build first.
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
改了半天发现就是一般的二分题,没有什么特别的。
要查询的内容分以下几类:
1. 不符合条件的 比如 start 》 end 那么需要处理下
2. start end 是作为segment tree某一个节点的start end
3. start end 正好垮了两个不同的节点的情况。
对于2,用root.start == start && root.end == end判断。
对于3,需要对当前节点的左右两个子节点求其中的最大值。拿上面的例子讲,如果要查询0,2.那么0 2 这个节点是不存在这棵树里的。需要找到当前节点的mid值,然后分别求左边跟右边: (0, 1)(2, 2)。 分别会带到左孩子(root.left)跟右孩子(root.right )得到的结果取一个最大值。
代码:
public int query(SegmentTreeNode root, int start, int end) { // write your code here if(root == null || start > end) return 0; if(root.start == start && root.end == end){ return root.max; } int mid = (root.start + root.end)/2; if(mid<start){ return query(root.right, start, end); } if(mid>end){ return query(root.left, start, end); } int leftmax = query(root.left, start, root.left.end); int rightmax = query(root.right, root.right.start, end); return Math.max(leftmax, rightmax); }
- Lintcode - Segment Tree Query
- #202 Segment Tree Query
- Segment Tree Query
- Segment Tree Query II
- #247 Segment Tree Query II
- [Lintcode]Segment Tree Query II
- [LintCode]Segment Tree Query 线段树的查询
- (LeetCode 307) Range Sum Query - Mutable(Segment Tree)
- lintcode segment-tree-query 线段树的查询
- leetcode: Segment Tree:Range Sum Query - Mutable(307)
- Segment tree
- Segment Tree
- Segment Tree
- segment Tree
- Segment Tree
- Segment Tree
- 202.Segment Tree Query-线段树的查询(中等题)
- 247.Segment Tree Query II-线段树查询 II(中等题)
- iOS中的HotFix方案总结详解
- 基本语法1-运算符_练习
- DER编码规则详解
- [iOS tableview]自定义HeadView + 复用
- HL-1208机器清零方法
- Segment Tree Query
- 基本语法2-流程控制_练习
- linux下的java环境变量配置问题
- openstack与hadoop
- java 反射机制 (获取父类泛型的类型)getGenericSuperclass
- 程序员常见的编码和转义
- python函数-返回菲波那切数列for,range,append
- centos7下安装jdk1.8
- 面向对象概念