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

如何跳过循环中重复校验,优化查找列表唯一不重复数字的Python函数

问题原因

你当前的实现时间复杂度为O(n²),arr.count(i)本身会遍历全列表统计次数,已经确认重复的数字后续再次被遍历到时,仍然会触发全列表统计,列表越大性能损耗越严重。

优化实现

方案1:哈希表统计(最优通用方案,时间复杂度O(n))

仅需2次遍历即可完成,性能稳定,适合任意规模的列表:

def find_uniq(arr):
    count_map = {}
    # 首次遍历统计所有元素出现次数
    for num in arr:
        count_map[num] = count_map.get(num, 0) + 1
    # 二次遍历查找唯一出现的元素
    for num, cnt in count_map.items():
        if cnt == 1:
            return num

如果可以使用标准库,用collections.Counter写法更简洁,内部做了性能优化:

from collections import Counter

def find_uniq(arr):
    count_map = Counter(arr)
    for num, cnt in count_map.items():
        if cnt == 1:
            return num

方案2:按要求实现已校验数字跳过逻辑

用集合存储已经确认重复的数字,避免重复统计:

def find_uniq(arr):
    # 存储已经确认重复的数字
    duplicate_nums = set()
    for num in arr:
        # 已确认重复的数字直接跳过
        if num in duplicate_nums:
            continue
        current_cnt = arr.count(num)
        if current_cnt == 1:
            return num
        # 出现次数大于1,加入重复集合后续跳过
        duplicate_nums.add(num)

该方案适合列表中不同元素数量较少的场景,性能比原始写法提升明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:45:03