【发布时间】:2020-11-07 15:31:39
【问题描述】:
更新:请有人回答我对 n 的最后评论。 '代词' m.'s answer?
请注意:我之前曾问过这个问题,但它完全是一团糟,所以我用更多细节和原始形式写了它。
问题:
我正在管理 N 个参与者(每个参与者的索引从 1 到 N)之间的投票系统,我希望支持以下功能:
- Init(N) - 初始化数据结构。 -O(1)
- Vote(j,i) - 将人 j 投票的结果表(正好 1)添加到人 i - 不允许某人自己投票。 -O(1)
- Voters(i) - 返回投票给 i 的人数。 -O(1)
- Origin(j) - 返回 j 给其他人的投票数。 -O(1)
- Favored(k) - 根据获得的票数打印排名靠前的参与者(按降序排列)。 -O(k)
- Avoided() - 打印所有未获得任何投票的参与者。 -O(r) 其中 r 是打印参与者的数量
在这个问题中,空间复杂度应该是O(N)。
只允许使用数组和(双)链表。
我做了什么?
我只需声明一个大小为 N 且每个单元格包含值的数组即可轻松解决 1-4; got 和 sent。当i 投票给j 时,我增加了j 的值并将i 的值加一。
我仍然不知道如何以所需的复杂性解决 5 和 6。
注意:我正在寻找算法/想法,而不是实际代码。
【问题讨论】:
-
您的实际问题是什么?您还需要提供与问题相关的代码,更具体地说明您的问题并阅读How do I ask a good question?。
-
@pzaenger 谢谢你,我已经做了必要的改变。如果有任何遗漏,请告诉我
-
地图、集合和优先级队列的组合应该可以解决问题。
-
@nice_dev 如前所述:只允许使用数组和(双)链表。
-
也许我可以利用这样一个事实,即当有人投票时,他每次都会投 一个 票?
标签: arrays algorithm data-structures linked-list structure