【发布时间】:2015-01-17 05:32:17
【问题描述】:
这是在一次采访中被问到的,我无法提出解决方案。场景是(某些项目的)权重数组。选择一个项目的成本是1。现在,如果您选择重量为 w 的物品,您将免费获得 range[w, w+4] 内的所有物品。该算法的工作是实现最低成本并挑选所有物品。
我的方法是有一个最大堆并遍历数组,并在遍历数组时计算可以通过拾取当前项目免费获得的项目数量,并使用最大堆来选择保证免费提供最大项目的项目.面试官说OK,但问我更好的解决方案,因为遍历部分本身成本O(n^2)。
具体例子
Weights array: 1 2 3 17 10
Minimum cost 3: I pick 1, get 2 and 3 for free and then pick both 17 and 10
【问题讨论】: