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

Python列表支配元素统计实现求助:验证右侧元素是否更小

解决整数列表中“支配元素”的统计问题

你的代码目前存在两个关键问题:

  • 仅对比了当前元素和紧邻的下一个元素,没有验证右侧所有元素是否都严格小于当前元素
  • 没有将最后一个元素计入统计(题目明确说明最后一个元素默认符合条件)

解法1:直观嵌套循环(易理解)

直接按照题目要求遍历每个元素,逐一检查其右侧所有元素:

def count_dominators(items):
    if not items:
        return 0
    count = 1  # 最后一个元素默认算一个
    n = len(items)
    for i in range(n - 1):
        current = items[i]
        is_dominator = True
        # 遍历当前元素右侧的所有元素
        for j in range(i + 1, n):
            if items[j] >= current:
                is_dominator = False
                break  # 只要有一个元素不满足,直接终止检查
        if is_dominator:
            count += 1
    return count

测试示例:count_dominators([42,7,12,9,2,5]) 返回3(符合条件的元素是42、12、5)。

解法2:从右往左遍历(高效O(n)复杂度)

如果列表规模较大,嵌套循环的O(n²)效率偏低。可以从右往左遍历,记录当前遇到的最大值,只要当前元素大于这个最大值,就说明它是支配元素,同时更新最大值:

def count_dominators(items):
    if not items:
        return 0
    count = 1
    max_right = items[-1]  # 初始最大值设为最后一个元素
    # 从倒数第二个元素开始向左遍历
    for num in reversed(items[:-1]):
        if num > max_right:
            count += 1
            max_right = num
    return count

这个方法仅需遍历一次列表,效率更高,结果与嵌套循环一致。

常见错误说明

你之前遇到的索引越界问题,通常是因为循环边界控制不当(比如使用enumerate时未限制遍历范围,或嵌套循环的索引超出列表长度)。上述两种解法都明确控制了循环边界,不会出现索引越界问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:41:02