2014-10-05 25 views
0

上周我参加了几家大型IT公司的面试。有一个问题让我有点困惑。下面是使用(值问题的精确描述。(从采访问题网站中的一个)Big Shot IT公司面试之谜

鉴于所述数据集,

A,B,A,C,A,B,A,D,A,B,A,C,A,B,A,E,A,B,A,C,A,B,A,D,A,B,A,C,A,B,A,F 

这可以减少到

(A; 16); (B; 8); (C; 4); (D; 2); (E; 1); (F; 1): 

,频率)格式。

对于这些元组中的总共m个元组,以非特定顺序存储。设计一个返回数据集的第k阶统计量的O(m)算法。 m是与n相对的元组的数量,它是数据集中元素的总数。

+0

你说“将数值链接到一个单独的数据结构”。你没有给出数值,重点是能够产生它们。另外,说“给它一个标准的算法”可能太模糊了。 – 2014-10-05 01:04:30

+3

“I [..]回答'*嘟{{某些bs}嘟* *'”是关于这个问题的读法。 – user2864740 2014-10-05 01:04:39

+0

“标准”算法不会考虑单独的数据结构。 – 2014-10-05 01:17:56

回答

2

您可以使用Quick-Select来解决此问题。

天真:

  1. 选择一个元件从所述阵列
  2. 把东西小于或等于所述枢轴在阵列的左侧(称为枢轴),在右侧的那些更大。
  3. 如果主轴在位置k,那么你就完成了。如果它大于k,则重复数组左侧的算法。如果它小于k,则重复数组右侧的算法。

有几个细节:

  1. 您需要可以挑选支点随机(如果你很高兴与预期O(M)为代价),或使用确定性的中值算法。
  2. 如果有很多值等于主键,则需要注意不要花费O(m^2)次。一个简单的方法是做第二遍将数组拆分成3个部分而不是2个:小于数据透视的数据,等于数据透视的数据,以及大于数据透视的数据。
+0

按数组,我们是在谈论一个包含所有频率的数组?我认为亚当在这里有一个有效的观点。获得第i个最小元素后,我们如何返回并告诉元素该数字对应于? – 2014-10-05 02:15:54

+0

将元素存储在数组中,而不仅仅是它们的频率。 – 2014-10-05 02:18:29

+0

看起来不错。只是要给它一个镜头。 – 2014-10-05 02:21:40