Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 减少列表遍历器的执行时间_Python_Algorithm_Execution Time - Fatal编程技术网

Python 减少列表遍历器的执行时间

Python 减少列表遍历器的执行时间,python,algorithm,execution-time,Python,Algorithm,Execution Time,我正在进行编码练习。我的逻辑是有道理的,但是在一个大的列表中,执行限制被超过了。以下是问题描述: 给每个候选人一系列的票数 到目前为止,一个整数k等于尚未投票的选民人数 投票了吗,找出还有多少候选人有投票权 赢得选举的机会 选举的获胜者必须获得比任何人都多的选票 其他候选人。如果两名或两名以上候选人收到相同的(最多) 票数,假设根本没有赢家 范例 对于票数=[2,3,5,2]和k=3,输出应为 选举获胜者(票数,k)=2 第一位候选人获得了2票。即使剩下的3个 候选人投票给他,他仍然只有5票,即

我正在进行编码练习。我的逻辑是有道理的,但是在一个大的列表中,执行限制被超过了。以下是问题描述:

给每个候选人一系列的票数 到目前为止,一个整数k等于尚未投票的选民人数 投票了吗,找出还有多少候选人有投票权 赢得选举的机会

选举的获胜者必须获得比任何人都多的选票 其他候选人。如果两名或两名以上候选人收到相同的(最多) 票数,假设根本没有赢家

范例

对于票数=[2,3,5,2]和k=3,输出应为 选举获胜者(票数,k)=2

第一位候选人获得了2票。即使剩下的3个 候选人投票给他,他仍然只有5票,即 与第三名候选人的人数相同,因此不会有获胜者。这个 如果剩下的所有候选人都投他的票,第二个候选人就可以获胜 (3 + 3 = 6 > 5). 第三位候选人即使没有一位候选人也能获胜 剩下的候选人投他的票。例如,如果 剩下的选民投票给他的每个对手,他将 仍然是赢家(因此选票数组将是[3,4,5,3])。这个 最后一位候选人无论如何都无法获胜(原因与第一位候选人相同) 第一名候选人)。因此,只有两名候选人可以获胜(第二名和第二名) 第三),这是答案

这是我的逻辑。我知道,对于这个问题,我必须检查列表中的每个元素,看看添加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
        
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)