4

今天我试图解决一个Facebook 编程挑战。我遇到的挑战是“酒吧问题”,可以在这里找到。在挑战过程中,我的问题是理解他们提供的第一个例子。

问题可以总结如下:

N个朋友在玩游戏。他们每个人面前都有一个数字列表。

N 个朋友中的每一个从他的列表中选择一个数字并报告给游戏管理员。然后游戏管理员对上报的数字进行排序,喊出第K大的数字。

您想知道游戏管理员可以喊出的所有可能的数字。

在那一点上,我认为我已经理解了这个问题,但随后他们提出了以下示例:

在给出的示例示例中,对于第一个测试用例 N = 3 和 K = 3。第一个人的列表是 {2 5 3},第二个人是 {8 1 6},第三个人是 {7 4 9}。在这种情况下,{4, 5, 6, 7, 8, 9} 中的所有数字都有机会成为第三大选定数字。

所以我的问题是:

7、8和9怎么会是第三大选定的数字?

在我看来,只有数字 {1, 2, 3, 4, 5} 可以是第三大数字,但也许我误解了算法。

4

2 回答 2

5

我认为您是对的,他们以错误的方式对数字进行了排序。如果您想获得第三小的而不是第三大的,建议的示例回复看起来是正确的回复。也就是说,将它们从小到大排序,你会得到第三个。这不是问题中所说的(但英语不是我的第一语言,所以我可能会弄错)。

于 2013-07-29T15:49:18.947 回答
0

The question must mean third smallest.

Given an array of sets, S_1,S_2...S_N, select one, and select a given element. Presume that we know both the largest and smallest element in every set, and divde the sets into three groups. Those in which all elements are greater than e, those in which all elements are less than e, and those in which there are elements both greater than and less than e.

For a set of N sets, and the k smallest, there must be no more than k-1 sets with all elements smaller than e, and no more than N-k sets with all elements greater than e. If those two conditions hold, i can take those sets which are both larger and smaller than e and arrange them in such a way that e would be chosen.

于 2014-05-13T16:34:20.623 回答