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

元素跨数据结构转移未新增对象时空间复杂度是否变化?附函数复杂度疑问

空间复杂度相关问题解答

问题1:元素在数据结构间转移且未新增对象时,空间复杂度是否变化?

这要分两种维度来看:

  • 若关注总空间(输入数据+算法临时空间):由于没有创建新对象,只是转移已有元素的存储位置,总空间确实保持恒定,不会变化。
  • 但算法分析中默认的空间复杂度指的是额外空间复杂度——即算法运行时,除输入本身外额外申请的存储空间大小:
    • 如果是原地转移(比如在原数组内调整元素,未使用新容器),额外空间复杂度为O(1);
    • 如果转移到新容器(比如从数组移到集合),哪怕没有新增对象,新容器的空间属于额外申请,最坏情况下其规模和输入规模n成正比,此时额外空间复杂度为O(n)。

问题2:查找首个重复值的函数空间复杂度判断是否正确?

你的判断错误,该函数的空间复杂度是O(n),而非O(1)。

原因在于:算法空间复杂度分析的是最坏情况下的额外空间占用。你用到的found集合属于额外申请的空间,原数组是输入数据,其空间不计入额外空间。当数组中无重复元素时,found集合会存储所有n个元素,此时额外空间的规模与输入n成正比,因此空间复杂度为O(n)。你提到的“总空间恒定”不是空间复杂度分析的核心维度,额外空间的增长趋势才是关键。

你的函数代码:

# o(n) time.
# o(1) space or o(n) space?
def firstDuplicateValue(array):
    found = set()
    while len(array) > 0:
        x = array.pop(0) #we remove elements from the array as we add them to the set
        if x in found:
            return x
        else:
            found.add(x)
    return -1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:36:22