学生选举结果理货

时间:2016-08-07 23:29:25

标签: algorithm data-structures

这是一个编码面试问题:

你的学校正在进行选举,你的任务是编写一个计算结果的程序。

您将获得一组投票,每个投票包含候选人和时间戳。给定时间戳,返回在该时间戳上得票最多的前N名候选人。 (每个投票结果必须在给定时间戳之前或之后)

3 个答案:

答案 0 :(得分:3)

创建Min Heap和HashMap Data结构来解决此问题。

1.在HashMap(候选人,投票)中投票。

2.在任何时候我们都想找到N个顶级趋势候选者,将所有HashMap键(候选投票)添加到限制为N大小的最小堆。

3.返回最小堆中的所有项目,这将返回前N个候选人的投票。 (作为min heap过滤具有大小N限制的候选者)。

答案 1 :(得分:0)

这可能远非最有效的方式,但我会:

  • 创建一个列表候选列表,其中包含每个候选人及其各自的投票数(最初为0)
  • 通过投票组,如果投票符合时间戳要求,则在候选列表中为候选人的投票加1。
  • 在您完成投票后,找到候选列表中第n个最受欢迎的候选人(使用选择算法),然后遍历列表以找到比他们更受欢迎的候选人。

答案 2 :(得分:0)

我会按照数组

进行

对于您阅读的每个新日期,您都会创建一个新的子阵列:假设您在2016年8月9日获得投票,对于John Doe soons,当您注册投票时,您还没有注册投票让我们说John Doe。 然后你的数组应该像这样构造:

array ->0->date: 09/08/2016
         ->John Doe: 1

由于我在选举中假设所有名称都是已知的,我们可以简单地将所有候选名称保存在另一个数组中,我们可以在循环使用这个名称时使用。

在另一个日期注册一个新的John Doe投票,你的数组看起来像这样

array ->0->date: 09/08/2016
         ->John Doe: 1
      ->1->date: 11/08/2016
         ->John Doe: 1

如果有人在已知日期投票支持另一个人,那么它应该是这样的

array ->0->date: 09/08/2016
         ->John Doe: 1
         ->Jane Doe: 1

希望这会有所帮助。如果你想通过这个数组结构来帮助循环,不要害怕问:)