Senior Lead AI Engineer · Power Day Coding

Capital One Sort Colors 原地排序:三指针不变量与边界

Senior Lead AI coding 题目只给 Sort Colors inplace 题名;按经典 0/1/2 训练版讲三指针算法,并标出需核接口。

题目重点:Senior Lead AI coding 题目只给 Sort Colors inplace 题名;按经典 0/1/2 训练版讲三指针算法,并标出需核接口。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 训练版数组元素只取 0、1、2,要求修改原数组,允许交换,不要求保持同色元素原相对顺序。
  • 若真实题有更多颜色或稳定排序要求,三指针方案不能直接宣称满足,需现场确认。

解题路线

  1. 维护区间 [0,low) 全为 0,[low,mid) 全为 1,[mid,high] 未检查,(high,n) 全为 2。初始 low=mid=0、high=n−1。
  2. 若 nums[mid]=0,交换 low/mid 后两指针都加一;若为 1,mid 加一;若为 2,交换 mid/high,high 减一但 mid 不变,因为换来的数尚未检查。
  3. 每步未检查区间长度缩一,且已确定区间不变量保持;循环到 mid>high 即全数组分区完毕。

手动走一遍

训练数组 [2,0,2,1,1,0]:先把首个 2 与末尾 0 换成 [0,0,2,1,1,2],mid 仍在 0;处理两个 0,再将中间 2 与右边 1 换,最后得到 [0,0,1,1,2,2]。

规模与取舍

单次扫描 O(n) 时间、O(1) 额外空间;交换次数 O(n)。算法通常不稳定,若题目要求稳定则要另做取舍。

易错点与追问

容易失分的边界

  • 交换 2 后立即 mid++,漏检查换入元素。
  • 没核原题是否真的只有三种取值。
  • 声称三指针保证稳定。
  • 空数组的 high=-1 要让循环自然退出。

继续深挖

  • 如果有 k 种颜色怎么办?
  • 稳定原地排序如何做、复杂度代价是什么?
  • 数据在流中不能随机访问时如何处理?
✓已复制微信号!