You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化统计列表支配元素的Python代码以提升运行速度?

优化支配元素统计代码的运行速度

问题定义

列表中的某个元素为支配元素(Dominator),当且仅当该元素右侧的所有元素(并非仅紧邻右侧的元素)都严格小于它。根据此定义,列表的最后一个元素自动成为支配元素。本函数需统计列表中支配元素的数量并返回该数值。例如,列表[42, 7, 12, 9, 13, 5]的支配元素为42、13和5。

现有代码及性能问题

我写出了可运行的代码,但运行速度较慢,请问该如何进行最优优化以提升运行速度?

现有代码:

def count_dominators(items):
    item_count = len(items)
    count = 0
    if item_count==0:
        return count;
        
    count+=1;
    
    if item_count==1:
        return count;
    
    for i in range(0,len(items)-1):
        flag=1
        for j in range(i+1,len(items)):
            
            if(items[j]>=items[i]):
                flag=0;
                break;
          
       
        if(flag==1):
            count+=1;
    return count

优化方案

你的代码采用两层嵌套循环,时间复杂度为O(n²),当列表元素数量较大时,运行效率会显著下降。我们可以通过反向遍历的方式将时间复杂度降至O(n),具体实现思路如下:

  • 初始计数器设为1(因为最后一个元素必然是支配元素),同时记录当前遇到的最大值为列表最后一个元素的值。
  • 从倒数第二个元素开始向前遍历每个元素:
    • 若当前元素大于记录的最大值,说明它是支配元素(右侧所有元素的最大值都小于它,自然所有元素都严格小于它),计数器加1,并更新最大值为当前元素的值。
    • 若当前元素小于等于最大值,直接跳过。

优化后的代码:

def count_dominators(items):
    if not items:
        return 0
    count = 1
    max_val = items[-1]
    # 从倒数第二个元素向前遍历
    for num in reversed(items[:-1]):
        if num > max_val:
            count += 1
            max_val = num
    return count

优化效果说明

  • 时间复杂度从O(n²)降至O(n),对于大规模数据(如包含10000个元素的列表),运行速度会有数量级的提升。
  • 空间复杂度保持O(1),无需额外开辟大量内存空间。

内容的提问来源于stack exchange,提问作者user19643684

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 12:45:44