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

能否在O(n)时间复杂度内统计列表中所有最小元素的个数?

可以实现单次遍历、严格O(n)时间复杂度的解法,思路如下:
遍历列表过程中同时维护两个临时变量:current_min 记录当前遍历到的最小元素值,count 记录当前最小值出现的次数。遍历每一个元素时按照规则更新两个变量即可:

  • 若当前元素 < current_min:说明找到了更小的新最小值,将current_min更新为当前元素,同时将count重置为1
  • 若当前元素 == current_min:直接将count加1
  • 若当前元素 > current_min:不做任何处理,继续遍历下一个元素

该方法仅需要遍历列表一次,空间复杂度为O(1),不需要额外的存储开销,处理长列表时的实际运行效率高于两次遍历的解法。

补充说明:你之前提到的两次遍历解法时间复杂度标注为O(2n),实际在算法时间复杂度的定义中,常数系数会被忽略,所以也属于O(n)时间复杂度范畴,但你要求的单次遍历方案确实可以减少一次遍历的开销。

以下是Python的实现示例:

def count_min_elements(nums: list) -> int:
    # 处理空列表的边界情况
    if not nums:
        return 0
    current_min = nums[0]
    count = 1
    # 从第二个元素开始遍历
    for num in nums[1:]:
        if num < current_min:
            current_min = num
            count = 1
        elif num == current_min:
            count += 1
    return count

# 用你提供的示例测试
test_list = [1, 2, 3, 1, 1, 5, 2, 1]
print(count_min_elements(test_list)) # 输出结果为4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:45:04