Lintcode: Segment Tree Query
2016-02-01 07:52
369 查看
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. Have you met this question in a real interview? Yes 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
这道题的启示是:Segment Tree 不光是可以找线段和,还可以找线段max, min等各种各样的指标
/** * 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 (root.start==start && root.end==end) return root.max; int mid = (root.start+root.end)/2; if (end <= mid) return query(root.left, start, end); else if (start > mid) return query(root.right, start, end); else return Math.max(query(root.left, start, mid), query(root.right, mid+1, end)); } }
相关文章推荐
- Lintcode: Segment Tree Build
- Divide and conquer:Sumsets(POJ 2549)
- UISlider用法总结
- iOS开发篇——UITextField
- iOS UIProgressView控件用法
- PAT1101. Quick Sort
- 微博UI
- HOWTO build additional kernel modules for Android
- 理解 Android Build 系统
- How To Build CyanogenMod Android for smartphone
- batman-adv——B.A.T.M.A.N. Advanced quick start guide
- (OK) 完整编译android 4.4源码—问题—CSSValueKeywords.cpp—CSSPropertyNames.cpp
- (NOT OK) How To Build CyanogenMod Android for Motorola Defy ("jordan")
- (OK) 交叉编译hello.c for android (--sysroot),不使用Android.mk和ndk-build
- error: undefined reference to '__aeabi_uidiv'
- ProcessMaker 3 Workflow & BPM Documentation——Enterprise Trial Guide
- Storm中new Value 与input.getString(int i)
- LinkedBlockingQueue 与ConcurrentLinkedQueue
- 阻塞队列BlockingQueue
- getRequestDispatcher()与sendRedirect()的区别