【发布时间】:2020-01-19 21:02:08
【问题描述】:
我正在为即将到来的考试而学习,我正在练习一个需要我实现贪心算法的问题。
我得到一个未排序的不同权重数组,其中所有 i 的 0 不将两个重物放在一堆,上面的一个大于下面的一个。我还必须尊重权重的顺序,所以它们必须按顺序放置。堆没有高度限制。
举个例子:如果我的权重是 {53, 21, 40, 10, 18},我不能将 40 放在 21 之上,因为堆必须按降序排列,我不能将 21 放在 40 之上,因为这不尊重命令。最佳解决方案是桩 1:53、21、10 和桩 2:40 18
我的一般解决方案是遍历数组并始终选择允许重量去的第一堆。我相信这会给我一个最佳解决方案(尽管我还没有证明)。我找不到与之相反的例子。但这将是 O(n^2),因为最坏的情况是我必须遍历每个元素和每个堆(我认为)
我的问题是,有没有办法将其降低到 O(n) 或 O(nlogn)?如果有,我只是没有看到它,需要一些帮助。
【问题讨论】:
-
是否强制使用贪婪
-
“所以它们必须按顺序放置” - 你可以多次遍历数组吗?
标签: algorithm performance time greedy