【发布时间】:2020-09-28 04:38:49
【问题描述】:
我正在进行编码练习。我的逻辑是有道理的,但是在一个大列表上超出了执行限制。这是问题描述:
给定每个候选人的投票数数组 到目前为止,一个整数 k 等于没有投票的选民的数量 投下他们的票,找出还有多少候选人 chance to win the election.
选举的获胜者必须获得比任何人都多的选票 其他候选人。如果两个或多个候选人收到相同的(最大) 票数,假设根本没有赢家。
例子
对于 votes = [2, 3, 5, 2] 和 k = 3,输出应该是 选举Winners(votes, k) = 2.
第一位候选人获得 2 票。即使剩下的 3 候选人投票给他,他仍然只有 5 票,即 与第三名候选人相同,因此不会有获胜者。这 如果所有剩余的候选人都投票给他,则第二个候选人可以获胜 (3 + 3 = 6 > 5)。即使没有一个候选人,第三个候选人也可以获胜 其余候选人投票给他。例如,如果每个 剩下的选民为他的每个反对者投票,他将 仍然是赢家(因此投票数组将是 [3, 4, 5, 3])。这 最后一位候选人无论如何都无法获胜(原因与 第一候选人)。因此,只有 2 个候选人可以获胜(第二个和 第三),这就是答案。
这是我的逻辑。我知道,对于这个问题,我必须遍历列表中的每个元素,看看添加 k 是否会使其成为列表中的最大值。但我也觉得我必须检查该值在列表中出现的次数,以正确确定是赢家还是平局:
def electionsWinners(votes, k):
# This variable basically counts the number of possible winners in the list
counter = 0
for i in votes:
# If all votes go into candidate i and its not a tie:
if k + i > max(votes) and votes.count(k + i) <= 1:
# Increment one because we have a potential winner
counter += 1
# If there are no remaining votes and the biggest value of the list only occures once
elif k == 0 and votes.count(max(votes)) == 1:
# We only have one winner
counter = 1
return counter
我知道我使用list.max() 和list.count() 会增加执行时间。有哪些方法可以让这段代码运行得更快?
虽然我感谢所有帮助,但看到人们只发布一个简单的答案是非常令人沮丧的。这不是家庭作业。它是为了练习,所以你给我答案对我一点帮助都没有。让我知道如何修复我现有的代码。提前谢谢大家。
【问题讨论】:
-
max(votes)的值不会改变,不应该在每次迭代中计算。 -
@KlausD。谢谢!
标签: python algorithm execution-time