博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lintcode :Segmemt Tree Build II
阅读量:5748 次
发布时间:2019-06-18

本文共 3462 字,大约阅读时间需要 11 分钟。

题目

Segmemt Tree Build II 

The structure of Segment Tree is a binary tree which each node has two attributes start and end denote 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 build method.
  • The left child of node A has start=A.left, end=(A.left + A.right) / 2.
  • The right child of node A hasstart=(A.left + A.right) / 2 + 1, end=A.right.
  • if start equals to end, there will be no children for this node.

Implement a build method 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:  

解题

理解题意:根据给的数组构建段树,该节点有区间及其该区间的最大值组成。区间的左右节点利用上面的规则计算。

/** * 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: * 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        return build(0,A.length-1,A);    }    public SegmentTreeNode build(int start,int end,int[] A){        if(start > end ){            return null;        }        SegmentTreeNode root = new SegmentTreeNode(start,end);        if( start != end){            int mid = (start + end)/2;            root.left = build(start,mid,A);            root.right = build(mid+1,end,A);            root.max = Math.max(root.left.max,root.right.max);        }else{            root.max = A[start];        }        return root;    }}
Java Code

总耗时: 2532 ms

"""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

转载地址:http://mjhzx.baihongyu.com/

你可能感兴趣的文章
Cocos2d-x游戏实例-《跑跑跑》制作教程(第一篇)——加载地图
查看>>
Jquery绑定事件
查看>>
android 资源种类及使用
查看>>
Explorer程序出错
查看>>
JDBC如何进行超时设置
查看>>
java之抽象工厂
查看>>
单链表的操作
查看>>
php mysql事务处理回滚操作
查看>>
log4j2性能剖析
查看>>
修改系统时间 ubuntu
查看>>
Centos7同时运行多个Tomcat
查看>>
Linux的find命令
查看>>
使用CocoaPods过程中的几个问题
查看>>
我的友情链接
查看>>
mysql数据类型---数值型---int
查看>>
linux5月24日课笔记
查看>>
为eclipse安装maven插件
查看>>
servlet中配置文件web.xml中的参数context-param和init-param区别
查看>>
Android自动化压力测试——Monkey工具
查看>>
公司新年第一次全员大会小记
查看>>