Python 减少列表遍历器的执行时间
我正在进行编码练习。我的逻辑是有道理的,但是在一个大的列表中,执行限制被超过了。以下是问题描述: 给每个候选人一系列的票数 到目前为止,一个整数k等于尚未投票的选民人数 投票了吗,找出还有多少候选人有投票权 赢得选举的机会 选举的获胜者必须获得比任何人都多的选票 其他候选人。如果两名或两名以上候选人收到相同的(最多) 票数,假设根本没有赢家 范例 对于票数=[2,3,5,2]和k=3,输出应为 选举获胜者(票数,k)=2 第一位候选人获得了2票。即使剩下的3个 候选人投票给他,他仍然只有5票,即 与第三名候选人的人数相同,因此不会有获胜者。这个 如果剩下的所有候选人都投他的票,第二个候选人就可以获胜 (3 + 3 = 6 > 5). 第三位候选人即使没有一位候选人也能获胜 剩下的候选人投他的票。例如,如果 剩下的选民投票给他的每个对手,他将 仍然是赢家(因此选票数组将是[3,4,5,3])。这个 最后一位候选人无论如何都无法获胜(原因与第一位候选人相同) 第一名候选人)。因此,只有两名候选人可以获胜(第二名和第二名) 第三),这是答案 这是我的逻辑。我知道,对于这个问题,我必须检查列表中的每个元素,看看添加k是否会使其成为列表中的最大值。但我也觉得我必须检查列表中该值的出现次数,以正确确定是否有赢家或平局:Python 减少列表遍历器的执行时间,python,algorithm,execution-time,Python,Algorithm,Execution Time,我正在进行编码练习。我的逻辑是有道理的,但是在一个大的列表中,执行限制被超过了。以下是问题描述: 给每个候选人一系列的票数 到目前为止,一个整数k等于尚未投票的选民人数 投票了吗,找出还有多少候选人有投票权 赢得选举的机会 选举的获胜者必须获得比任何人都多的选票 其他候选人。如果两名或两名以上候选人收到相同的(最多) 票数,假设根本没有赢家 范例 对于票数=[2,3,5,2]和k=3,输出应为 选举获胜者(票数,k)=2 第一位候选人获得了2票。即使剩下的3个 候选人投票给他,他仍然只有5票,即
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
def选举获胜者(票数,k):
#此变量基本上统计列表中可能的赢家数量
计数器=0
我的投票结果如下:
#如果所有选票都投给候选人i,而不是平局:
如果k+i>max(投票数)和vows.count(k+i)一些可以优化的事情:
max(vots)
不依赖于i
的值,因此不应在每次循环迭代中对其进行评估。在循环开始之前对其进行一次评估
- 表达式
k==0和voces.count(max(voces))==1也是如此。它不依赖于循环变量,因此它不应该出现在循环中。它应该成为决定是否应该执行循环的条件
k+i>max(投票数)和vows.count(k+i)一些可以优化的东西:
max(vots)
不依赖于i
的值,因此不应在每次循环迭代中对其进行评估。在循环开始之前对其进行一次评估
- 表达式
k==0和voces.count(max(voces))==1也是如此。它不依赖于循环变量,因此它不应该出现在循环中。它应该成为决定是否应该执行循环的条件
k+i>max(票数)和票数。计数(k+i)max(票数)
的值不会改变,不应在每次迭代中计算。非常感谢。max(投票数)
的值不会改变,不应在每次迭代中计算。非常感谢。
def electionsWinners(votes, k):
greatest = max(votes)
if k == 0:
if votes.count(greatest) == 1:
return 1
else:
return 0
counter = 0
for i in votes:
if k + i > greatest:
counter += 1
return counter
def electionsWinners(votes, k):
greatest = max(votes)
if k == 0:
return int(votes.count(greatest) == 1)
return sum(1 for i in votes if k + i > greatest)
def electionsWinners(votes, k):
mx = max(votes)
return sum(1 for i in votes if k + i > mx) if k else int(votes.count(mx) == 1)