【问题标题】:How to approach BST Problems?如何解决 BST 问题?
【发布时间】:2020-08-05 19:06:52
【问题描述】:

我遇到了这个问题:

给定一个由 n 个不同整数组成的序列 a0, a1, 。 . .一个-1。每个 迭代你选择最大数量并删除它,检测成本 最大数字是它左边的数字的数量。重复 这 n 次。给定 ai 的实现一个 O(n log n) 算法来 计算 n 次迭代的总成本。

我知道我们必须使用 BST 来解决这个问题,因为它是 O(N log N),但是,我不知道该怎么做。

我在想我可以将值和索引存储在 hashMap 中,当删除完成后,我们在 BST 中搜索该索引并将索引值添加到遍历的路径中。然而,在删除节点时,我们必须减少所有索引的 BST 索引值 > 要删除的索引。

我不确定这是否可行,我希望得到任何关于此的建议/指导 :)

【问题讨论】:

  • 不需要BST,只需排序,计数sum,然后反向循环并不断添加sum-current来回答和更新总和值
  • @Photon 但是排序会改变元素的位置,我们需要它们来计算当前最大值左侧的元素数量。

标签: algorithm binary-search-tree


【解决方案1】:

虽然@0x499602D2 评论是正确的,但排序是正确的方法。这个问题是归并排序的又一个应用,类似于倒数。

从右侧合并一个元素会减少左侧剩余元素数量的成本(你明白为什么吗?)。数组完全排序后,成本降为0。

我希望这足以让您入门。

【讨论】:

    猜你喜欢
    • 2016-11-15
    • 2011-01-04
    • 2012-03-22
    • 2021-12-22
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多