【发布时间】:2010-12-29 05:01:27
【问题描述】:
我在 Adobe 面试中被问到这个问题:
我们有一个按升序排序的整数数组。我们还有 3 个整数 A、B 和 C。我们需要为数组中的每个元素x申请A*x*x + B*x + C,并返回对应的排序后的数组。
给我的例子:
Input array = -1 0 1 2 3 4
A = -1, B = 2, C = -1`
将公式应用于每个元素的结果 = -4 -1 0 -1 -4 -9
所以预期结果 = -9 -4 -4 -1 -1 0(已排序)
我最好的解决方案是应用公式并对其进行排序,从而得到O(nlogn) 解决方案。我不能做得更好。
任何改进它的指导都是有帮助的。
【问题讨论】:
-
按 O(logN) 时间排序??不可以,应该是 O(N*LogN) 时间......从数学上证明,你不能在小于 O(NLogN) 的时间内对随机数集合进行排序
-
他期待 O(N) 解决方案。
-
@birryree:你必须利用这种情况的特殊性来意识到
O(n)是可能的。此外,元推理表明这个问题并不有趣,除非答案不是O(n log n)。 -
@birryree:当回复出现建议不那么出色的评论时删除 cmets 是蹩脚的。
-
@user556744:不要误会,这是对未来面试的真诚建议。您的解决方案太简单了。任何在算法课程中有过感触的人都可以想出它。这表明必须有一个更好的解决方案,或者这是一个糟糕的面试问题(因为否则它不会过滤好坏)。因为这不太可能是一个糟糕的面试问题,所以必须有一个更好的解决方案。此外,您没有使用转换是抛物线这一事实(它可能是 anything 并且您的解决方案仍然有效)。这表明您忽略了一些重要的事情。