首页 > 试题广场 >

构造MaxTree

[编程题]构造MaxTree
  • 热度指数:3730 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

对于一个没有重复元素的整数数组,请用其中元素构造一棵MaxTree,MaxTree定义为一棵二叉树,其中的节点与数组元素一一对应,同时对于MaxTree的每棵子树,它的根的元素值为子树的最大值。现有一建树方法,对于数组中的每个元素,其在树中的父亲为数组中它左边比它大的第一个数和右边比它大的第一个数中更小的一个。若两边都不存在比它大的数,那么它就是树根。请证明这个方法的正确性,同时设计O(n)的算法实现这个方法。

给定一个无重复元素的数组A和它的大小n,请返回一个数组,其中每个元素为原数组中对应位置元素在树中的父亲节点的编号,若为根则值为-1。

测试样例:
[3,1,4,2],4
返回:[2,0,-1,2]
头像 重生之我要当分子
发表于 2025-01-01 15:29:17
解题思路 这是一个构建最大树的问题。对于每个元素,需要找到其左边和右边第一个比它大的数,取较小值作为父节点。 关键点: 使用单调栈找左右第一个大的元素 栈中保持递减顺序 每个元素的父节点是左右第一个大的数中较小的那个 时间复杂度要求 算法步骤: 使用单调栈找左边第一个大的数 使用单调栈找右边 展开全文

问题信息

难度:
43条回答 21953浏览

热门推荐

通过挑战的用户

查看代码
构造MaxTree