lintcode 中等题:Segmemt Tree Build II
2015-11-06 22:21
204 查看
题目
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
样例
Given
说明
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
解题
理解题意:根据给的数组构建段树,该节点有区间及其该区间的最大值组成。区间的左右节点利用上面的规则计算。
这个节点定义要好好理解。
Python Code
总耗时: 750 ms
Segmemt Tree Build II
The structure of Segment Tree is a binary tree which each node has two attributesstartand
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.
样例
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)
说明
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
解题
理解题意:根据给的数组构建段树,该节点有区间及其该区间的最大值组成。区间的左右节点利用上面的规则计算。
/** * 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; * } * } */
这个节点定义要好好理解。
""" Definition of SegmentTreeNode: class SegmentTreeNode: def __init__(self, start, end, max): self.start, self.end, self.max = start, end, max self.left, self.right = None, None """ class Solution: # @oaram A: a list of integer # @return: The root of Segment Tree def build(self, A): # write your code here return self.buildX(0,len(A) - 1,A) def buildX(self,start,end,A): if start > end: return None maxX = 0 root = SegmentTreeNode(start,end) if start != end: mid = int((start + end)/2) root.left = self.buildX(start,mid,A) root.right = self.buildX(mid+1,end,A) root.max = max(root.left.max,root.right.max) else: root.max = A[start] return root
Python Code
总耗时: 750 ms
相关文章推荐
- [hadoop2.7.1]I/O之SequenceFile最新API编程实例(写入、读取)
- 【UI基础】时钟效果的简单实现
- This Android SDK requires Android Developer Toolkit version 23.0.0 or above
- 最长递增子序列详解(longest increasing subsequence)
- iOS入门编程1--iOS8中提示框的使用UIAlertController(UIAlertView和UIActionSheet二合一)
- Codeforces 235C Cyclical Quest(后缀自动机)
- Introduction to Algorithm - Summary of Chapter 7 - Quicksort
- hdu 4675 GCD of Sequence(计数)
- 第3章 Android UI
- arduino学习笔记 一
- storm ui 中一些关键属性的含义
- 【Android问题及其解决】UI优化记录
- hdu 4667 Building Fence(几何)
- android stuido离线更新的两种方式(亲测可用)
- android studio error:'D:\ProgramSoft\android-ndk-r10e\ndk-build.cmd'' finished with non-zero exit
- LeetCode题解:Longest Increasing Subsequence O(N^2解法)
- 纯SystemC设计吃进Questasim10.2c时遇到的问题
- 快速排序的简单实现(Quick_Sort)
- 快速排序的简单实现(Quick_Sort)
- leetcode之Unique Paths