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

Python中数组原地移除指定元素的时间与空间复杂度确认

复杂度分析确认与优化建议

你的复杂度分析完全正确,具体拆解如下:

  • 空间复杂度O(n):nums[:]会创建原数组的完整副本,需要占用与原数组相同的内存空间,因此空间复杂度为O(n)。
  • 时间复杂度O(n²):遍历副本的操作是O(n),但每次调用nums.remove(value)时,列表需要先找到目标元素(最坏O(n)),然后将该元素之后的所有元素向前移动一位(也是O(n))。如果数组中有k个等于val的元素,总时间开销就是O(n + k*n),最坏情况下k=n,总时间复杂度退化为O(n²)。

优化解法(O(n)时间 + O(1)空间)

可以用双指针法实现原地修改,完全符合题目要求的“原地操作”且效率更高:

def removeElement(nums, val):
    k = 0
    for i in range(len(nums)):
        if nums[i] != val:
            nums[k] = nums[i]
            k += 1
    return k

这个思路是用慢指针k记录有效元素的位置,快指针i遍历整个数组,遇到不等于val的元素就把它放到慢指针的位置,最后k就是有效元素的个数,全程不需要额外创建数组副本,也没有高开销的remove操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 23:34:52