lintcode-medium-Segment Tree Build II
2016-04-05 17:52
435 查看
The structure of Segment Tree is a binary tree which each node has two attributes
start and end are both integers, they should be assigned in following rules:
The root's start and end is given by
The left child of node A has
The right child of node A has
if start equals to end, there will be no children for this node.
Implement a
Clarification
Segment Tree (a.k.a Interval Tree) is an advanced data structure which can support queries like:
which of these intervals contain a given point
which of these points are in a given interval
See wiki:
Segment Tree
Interval Tree
Example
Given
[/code]
startand
enddenote an segment / interval.
start and end are both integers, they should be assigned in following rules:
The root's start and end is given by
buildmethod.
The left child of node A has
start=A.left, end=(A.left + A.right) / 2.
The right child of node A has
start=(A.left + A.right) / 2 + 1, end=A.right.
if start equals to end, there will be no children for this node.
Implement a
buildmethod with a given array, so that we can create a corresponding segment tree with every node value represent the corresponding interval max value in the array, return the root of this segment tree.
Clarification
Segment Tree (a.k.a Interval Tree) is an advanced data structure which can support queries like:
which of these intervals contain a given point
which of these points are in a given interval
See wiki:
Segment Tree
Interval Tree
Example
Given
[3,2,1,4]. The segment tree will be:
[0, 3] (max = 4) / \ [0, 1] (max = 3) [2, 3] (max = 4) / \ / \ [0, 0](max = 3) [1, 1](max = 2)[2, 2](max = 1) [3, 3] (max = 4)
[/code]
/** * 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 A: a list of integer *@return: The root of Segment Tree */ public SegmentTreeNode build(int[] A) { // write your code here if(A == null || A.length == 0) return null; return build(A, 0, A.length - 1); } public SegmentTreeNode build(int[] A, int start, int end){ if(start == end){ return new SegmentTreeNode(start, end, A[start]); } int mid = start + (end - start) / 2; SegmentTreeNode left = build(A, start, mid); SegmentTreeNode right = build(A, mid + 1, end); SegmentTreeNode root = new SegmentTreeNode(start, end, Math.max(left.max, right.max)); root.left = left; root.right = right; return root; } }
相关文章推荐
- 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 物理动效
- UISearchBar(搜索框)的方法属性介绍
- AndroidUI之登录界面的实现分析
- UIButton内文字自适应button长度