【发布时间】:2020-11-07 12:41:34
【问题描述】:
我有N 个人,想参加选举。
对于每个人,我想在O(1) 中保存给他投了多少票以及他给了其他人多少票。
( 我已经通过声明一个长度为N 的数组完成了该部分,每个单元格中有两个属性;taken 和given。
当 1 对 2 投票时,我将个人 2 的 taken 和个人 1 的 given 一个一个地增加。)
我如何打印在O(j) 中没有获得任何投票的所有个人,其中j 是这些个人的数量?
我只能使用O(N) 空间。 (请解释想法而不是代码)
注意:我只知道数组、列表和双向链表。 (请解释想法而不是代码)并且我想在 O(1) 中初始化数据结构
【问题讨论】:
-
如果你没有显示/询问代码,那么 C++ 标签似乎是不必要的。
-
您可以存储一个链接的个人哈希集(大小 N),并在他们被投票时从集合中删除(常数时间摊销),留下一个大小为 J 的哈希集,可迭代由于链表,在 J 时间。
-
链表散列结构将链表和散列映射结合起来,保证了特定的性能。这里是 Java 的简要概述,但可以用任何语言实现:java67.com/2012/08/…
-
如果您在一个数组中有完整的候选人列表,那么每当您找到一个已收到或投过票的候选人时,您都可以从该数组中删除该候选人。 final 数组将只有未收到或未投票的用户
-
该用户在此处更详细地转发了此问题:Job Interview Algorithm?
标签: arrays algorithm data-structures structure