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

替代splice往数组指定索引添加元素:时间复杂度优劣分析

关于替代splice方法的时间复杂度分析

你的方法并没有在时间复杂度上优于splice,甚至在部分场景下更糟,同时还改变了原数组的结构逻辑,和splice的实际作用完全不同。

时间复杂度拆解

  • 先看你的代码操作:

    • arr[5] = [[], 5]:赋值操作,时间复杂度O(1)
    • arr[5].push(15,125,1035):数组push是均摊O(1)(仅在数组扩容时偶尔出现O(k),k为子数组当前长度,日常场景可视为常数时间)
    • arr[5].shift():数组shift操作需要将子数组中所有元素向前移动一位,时间复杂度为O(k)(k是该子数组的长度)。你这里子数组长度是4,所以是O(1)级别的常数操作,但如果子数组后续持续扩容,shift的开销会随子数组长度线性增长。
  • 再对比splice:splice的O(n)复杂度来自原数组元素的移位——比如你要在索引5的位置插入元素,splice需要把原数组中索引5及之后的所有元素向后移动,移动的数量是原数组长度减去5。但splice的核心是保持原数组的线性结构,不会嵌套子数组。

核心问题:两者不是同一场景的替代方案

你的方法本质是把原数组的某个索引位置改成了嵌套数组容器,和splice的作用完全不同:

  • splice是在原数组的线性结构中插入/删除元素,所有元素仍然处于同一层级;
  • 你的方法是把单个索引位置变成了数组,后续操作都是在这个子数组里进行,原数组的结构从一维变成了“一维+嵌套一维”的结构。

关于你之前的误解

确实,当数组索引对应的是数字、字符串这类原始值时,无法调用push方法——因为原始值不是对象/数组,没有push这类原型方法。你通过把该索引的值替换成数组,就能调用push了,但这不是“往数组索引执行push”,而是往该索引存储的数组对象执行push操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:35:24