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

ArrayList随机索引删除:交换末位实现O(1)时间是否正确?

结论:你的判断完全正确

这种在允许打乱元素顺序的前提下,通过交换目标索引元素与末尾元素,再删除末尾元素的方式,确实能把ArrayList随机索引删除的时间复杂度降到O(1),具体原因如下:

  • ArrayList的底层实现是动态数组,常规删除非末尾元素时,需要将目标索引之后的所有元素向前移位,这一步的时间复杂度是O(n)(n为列表长度)
  • 你的方案里的核心操作都是常数时间:
    • 生成范围内的随机索引:属于O(1)操作
    • 交换目标索引与末尾元素:数组通过下标直接访问元素,交换仅需两次赋值,是O(1)
    • 删除末尾元素:只需修改ArrayList的size标记,无需移动任何元素,同样是O(1)

这种技巧是处理无需保持顺序的集合删除场景时,优化时间复杂度的常用手段,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:45:46