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

列表支配元素统计功能实现求助(附错误Python代码)

列表支配元素统计问题修复

需求回顾

列表中的**支配元素(dominator)**指该元素右侧所有元素(不仅是紧邻右侧的元素)都严格小于它,需要统计这类元素的总数量。

原代码问题分析

你当前的代码逻辑不符合需求:

  • 原代码中,只要当前元素比右侧任意一个元素大,就会给countDem加1,这会导致重复计数,且错误地将“仅大于部分右侧元素”的元素也算作支配元素。
  • 举个例子:列表[5,3,4],原代码会因为5>3加1、5>4加1,最终返回2,但实际上只有5是支配元素,正确结果应为1。

正确解法

方法1:暴力优化法(逻辑直观)

遍历每个元素,检查其右侧所有元素是否都严格小于它,只有全部满足时才计数:

def count_dominators(digits):
    count = 0
    n = len(digits)
    for i in range(n):
        is_dominator = True
        # 检查当前元素右侧所有元素
        for j in range(i + 1, n):
            if digits[i] <= digits[j]:
                is_dominator = False
                break  # 只要有一个元素不满足,直接终止检查
        if is_dominator:
            count += 1
    return count

方法2:高效遍历法(时间复杂度O(n))

从右往左遍历,记录右侧已遍历元素的最大值:

  • 最后一个元素右侧没有元素,必然是支配元素,初始计数设为1。
  • 每往左遍历一个元素,若它大于当前记录的右侧最大值,说明它比右侧所有元素都大,计数加1并更新最大值。
def count_dominators(digits):
    if not digits:
        return 0
    count = 1
    max_right = digits[-1]
    # 从倒数第二个元素开始向左遍历
    for num in reversed(digits[:-1]):
        if num > max_right:
            count += 1
            max_right = num
    return count

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:25:20