Algorithm 学生选举结果统计

Algorithm 学生选举结果统计,algorithm,data-structures,Algorithm,Data Structures,这是一个编码面试问题: 你的学校正在举行选举,你的任务是编写一个程序来统计选举结果 您将获得一组选票,每张选票包含一名候选人和一个时间戳。给定时间戳,返回在该时间戳投票最多的前N名候选人。(每次计票必须在给定的时间戳之前或之前)这可能远不是最有效的方式,但我会: 创建一份候选人名单,其中包含每位候选人及其各自的票数(最初为0) 检查投票集,如果投票符合时间戳要求,则在候选名单中为候选人的投票添加1 完成投票后,在候选名单中找到第n个最受欢迎的候选人(使用选择算法),然后在列表上迭代以找到比他们

这是一个编码面试问题:

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


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

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

  • 创建一份候选人名单,其中包含每位候选人及其各自的票数(最初为0)
  • 检查投票集,如果投票符合时间戳要求,则在候选名单中为候选人的投票添加1
  • 完成投票后,在候选名单中找到第n个最受欢迎的候选人(使用选择算法),然后在列表上迭代以找到比他们更受欢迎的候选人

创建Min Heap和HashMap数据结构以解决此问题

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

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


3.返回最小堆中的所有项,该堆将返回具有投票权的前N个候选项。(作为最小堆,使用大小N的限制筛选候选对象)

我会按数组执行

对于您阅读的每一个新日期,您都会创建一个新的子阵列:假设您从2016年8月9日开始获得一张投票,您还没有为其登记投票。l,为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
如果有人在已知日期投票给另一个人,应该是这样的

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

希望这有帮助。如果您需要帮助循环遍历此数组结构,请不要害怕问:)

您能详细说明一下吗?你在哪里使用时间戳?你在什么时候分类了吗?当我们想找到得票最多的候选人时,最小堆有什么用处?您将以何种方式将“所有”键添加到minHeap?价值观是什么?