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

Python求解未出现最小正整数的解法性能测试未通过,求原因

为什么我的“找未出现的最小正整数”解法性能不佳?

你当前的解法仅通过1个性能测试,核心问题出在时间复杂度太高:

你的代码里,A.index(val)是列表的线性查找操作,每次查找都要遍历整个列表,时间复杂度为O(n)。如果输入的列表是[1,2,3,...,100000]这类连续正整数,循环会执行100001次,每次都要遍历10万元素,总时间复杂度达到O(n²)。面对大规模测试用例时,这种解法会因为超时无法通过性能测试。

优化方案1:用集合实现O(1)查找(简单易理解)

把列表转成集合后,成员查询的时间复杂度降到O(1),整体时间复杂度变为O(n),能轻松应对大规模数据:

def solution(A):
    num_set = set(A)
    val = 1
    while val in num_set:
        val += 1
    return val

优化方案2:原地哈希(空间复杂度O(1))

如果要求不使用额外空间,可以利用数组下标标记存在的正整数,全程在原数组上操作:

def solution(A):
    n = len(A)
    # 把所有非正整数和超过n的数替换成n+1(我们只关心1~n范围内的数)
    for i in range(n):
        if A[i] <= 0 or A[i] > n:
            A[i] = n + 1
    # 用负数标记对应下标的正整数存在
    for num in A:
        abs_num = abs(num)
        if abs_num <= n:
            A[abs_num - 1] = -abs(A[abs_num - 1])
    # 第一个正数对应的下标+1就是答案
    for i in range(n):
        if A[i] > 0:
            return i + 1
    # 所有1~n都存在,返回n+1
    return n + 1

内容的提问来源于stack exchange,提问作者Emmanuel John Gerasta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 18:32:18