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

LeetCode 977:有序数组的平方解法复杂度对比及最优解询问

LeetCode 977. 有序数组的平方 解法对比与优化分析

你的解法复杂度拆解

你用map()生成平方数组,再通过sorted()排序最后转成IntArray的解法:

  • 时间复杂度:map()遍历数组是O(n),但Kotlin的sorted()基于TimSort实现,时间复杂度为O(n log n),所以整体时间复杂度是O(n log n)。
  • 空间复杂度:map()、sorted()以及最终转IntArray都需要创建和原数组长度线性相关的额外空间,整体为O(n)。

双指针解法复杂度拆解

那个标注O(n)的双指针解法,核心是利用原数组非递减的特性——绝对值最大的元素必然在数组两端。用左右指针从两端向中间遍历,比较平方值大小后从结果数组末尾开始填充:

  • 时间复杂度:仅需一次遍历处理所有元素,每个元素只访问一次,所以是O(n),时间效率明显优于你的解法。
  • 空间复杂度:需要创建一个和原数组长度相同的结果数组,没有额外的线性空间开销,所以也是O(n),和你的解法空间复杂度一致。

有没有更优解?

从复杂度角度看,双指针解法已经是这个问题的最优解:

  • 时间上不可能比O(n)更优,因为至少要遍历每个元素一次计算平方值,这是问题的最低时间门槛。
  • 空间上,如果允许修改原数组,尝试原地修改的话,平方后的元素顺序会混乱,后续原地排序又会回到O(n log n)的时间,反而不如双指针解法;如果要求返回新数组,O(n)的空间是必须的——毕竟要存储n个结果元素,没法再压缩。

所以双指针解法就是当前问题的最优选择,它和你的解法空间复杂度相同,但时间效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 08:48:14