另一种算法工作面试

时间:2010-10-14 08:42:52

标签: algorithm

所以这就是问题:

  

假设你有10万个整数,范围从1到1百万。请整理整数。时间复杂度应为O(n)。

任何分享他或她的想法的人都会受到赞赏。

5 个答案:

答案 0 :(得分:15)

听起来很简单。

  1. 为大小为100万的数组a保留内存
  2. 将所有数组值初始化为0
  3. 循环整数。对于每个整数,我将a [i]递增1。
  4. 通过遍历数组并打印每个数字i输出已排序的序列,持续[i]次。
  5. 空间不变。运行时为O(n)。

答案 1 :(得分:3)

提示应该是1到100万。

请参阅pigeonhole sort

答案 2 :(得分:2)

由于问题具有固定大小并包含一组有限的实例,因此任何排序算法都将在O(1)中终止。你应该告诉测试人员回到算法分析学校。将此问题推广到无限集的一种可能方法是:您有一个大小为n的数组,其数字范围为[0,10n]。你能用O(n)对它进行排序吗?这对我来说很有意义。或者您可以使用数组的大小和整数的范围来参数化问题,并得出一些O(f(n,k))绑定。问题是当你在面试中遇到这样的问题时,你会怎么做?您是否试图猜测面试官想听到什么,或者您是否说过“让我重新解释您的问题”?或者你只是笑着走向出口?

答案 3 :(得分:0)

使用计数排序。只计算所有这些(O(n)),然后再次创建填充结果数组(O(n))。

答案 4 :(得分:0)

您必须使用任何已知的复杂度为O(n)的排序算法

Is there an O(n) integer sorting algorithm?