【问题标题】:How to solve the Next Greater Element in an array [ Not The First Next Greater Element] to the right?如何解决数组中的下一个大元素[不是第一个下一个大元素]?
【发布时间】:2016-03-23 22:43:25
【问题描述】:

以前有一些帖子可以解决这个问题,但他们提供了右边的第一个下一个大元素而不是右边的下一个大元素的解决方案。

假设输入数组为[4, 15, 2, 9, 20, 11, 13 ,16 ,3]

右边输出的下一个大元素是

4 -> 9 ,
15 -> 16 ,
2->3 ,
9->11 ,
20->-1 ,
11->13 ,
13->16 ,
16->-1 ,
3->-1 ,

第一个下一个更大的元素输出就像

4->15 ,
15->20 ,
2->9 ,
9->20 ,
20->-1
11->13
13-> 16
16-> -1
3-> -1

我希望你们能理解其中的区别。

几乎所有在线资源[据我所知]都为第二种情况提供了解决方案。

我希望以乐观的方式解决第一种情况的解决方案[算法] [

任何类型的数据结构都适合我。

提前致谢。

【问题讨论】:

  • 如果输入 case 包含 [12, 11,13] ,排序将导致 [11,12,13 ] 。所以答案是 12 但实际上是 13 [右边的下一个更大的元素]
  • 对,排序解决不了问题。我的错。

标签: arrays algorithm data-structures stack logic


【解决方案1】:

这被称为超越者问题。可以通过将项目按倒序(即从最后到第一个)放入自平衡 BST 来解决。将节点插入树后,您可以通过查看其右孩子的子树中的最小元素来找到它的下一个更大的元素,或者(如果它没有右孩子),下一个更大的元素是第一个节点属于其左子树的祖先(第一个大于插入节点的祖先)。

复杂度:O(n log n)

还有一种替代解决方案,使用类似于归并排序的 am 算法。

here

【讨论】:

  • 好主意...!!谢谢:)
猜你喜欢
  • 2019-11-29
  • 2022-12-31
  • 2021-09-10
  • 2019-01-08
  • 2019-11-17
  • 1970-01-01
  • 1970-01-01
  • 2014-07-28
  • 2011-08-18
相关资源
最近更新 更多