这是一个编码面试问题:
你的学校正在进行选举,你的任务是编写一个计算结果的程序。
您将获得一组投票,每个投票包含候选人和时间戳。给定时间戳,返回在该时间戳上得票最多的前N名候选人。 (每个投票结果必须在给定时间戳之前或之后)
答案 0 :(得分:3)
创建Min Heap和HashMap Data结构来解决此问题。
1.在HashMap(候选人,投票)中投票。
2.在任何时候我们都想找到N个顶级趋势候选者,将所有HashMap键(候选投票)添加到限制为N大小的最小堆。
3.返回最小堆中的所有项目,这将返回前N个候选人的投票。 (作为min heap过滤具有大小N限制的候选者)。
答案 1 :(得分:0)
这可能远非最有效的方式,但我会:
答案 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
希望这会有所帮助。如果你想通过这个数组结构来帮助循环,不要害怕问:)