zoukankan      html  css  js  c++  java
  • 654. Maximum Binary Tree

    654. Maximum Binary Tree

    题目大意:

        意思就是给你一组数,先选一个最大的作为根,这个数左边的数组作为左子树,右边的数组作为右子树,重复上一步。

        读完就知道是递归了。

        这个题真尼玛恶心,对JavaScript的友好度简直为0,用Js的可以直接放弃了。

     1         function TreeNode(val) {
     2             this.val = val
     3             this.left = this.right = null
     4         }
     5 
     6         var constructMaximumBinaryTree = function(nums) {
     7             var ans = findmaxvalue(nums, 0, nums.length-1)
     8             return ans
     9         }
    10 
    11         function findmaxvalue(nums, l, r)
    12         {
    13             if(r < l) {
    14                 return null;
    15             }
    16             var max = nums[l];
    17             var maxpos = l;
    18             for(var i=l+1;i<=r;i++)
    19             {
    20                 if(nums[i] > max) {
    21                     maxpos = i
    22                     max = nums[i]
    23                 }
    24 
    25             }
    26             var root = new TreeNode(max)
    27             root.left = findmaxvalue(nums, l, maxpos-1)
    28             root.right = findmaxvalue(nums, maxpos+1, r)
    29             return root;
    30         }

    时间复杂度应该是小于n2的,但是我不知道这种方法的复杂度到底是多少,我猜是x(x可能是nlogn,我也不太清楚)。

    如果用线段树的话,复杂度应该是x'(n < x' < x < n2

    我提交了一下发现是错的,理论输出是一个数组,我tm甚至用BFS搜索了一下二叉树,加入到一个数组里了,然后我本来push为null的元素,测评机输出为一个数组???????气的一笔,随便找了份代码交了。

    BFS代码:

            var ans = findmaxvalue(nums, 0, nums.length-1)
            var res = []
            var queue = []
            queue.push(ans)
            while(queue.length != 0) {
                var t = queue.shift()
                if(t != null) {
                    res.push(t.val)
                    if(t.left != null || t.right != null) {
                        queue.push(t.left)
                        queue.push(t.right)
                    }
                }
                else {
                    res.push(null)
                }
            }
  • 相关阅读:
    Django用户认证系统(三)组与权限
    Django用户认证系统(二)Web请求中的认证
    Django用户认证系统(一)User对象
    Django QuerySet API文档
    带有Header的SOAP 请求
    环境的配置,就需要理解组件的原理和机制。
    Hotspot JVM的常用选项
    Java程序员必学的Hotspot JVM选项
    三大Java 虚拟机垃圾回收机制的比较(HotSpot, JRockit, IBM JVM)
    [原]使用Fiddler捕获java的网络通信数据
  • 原文地址:https://www.cnblogs.com/liwenchi/p/8315986.html
Copyright © 2011-2022 走看看