循环排序

01 / 共享的机制

当取值落在已知范围 [0, N] [1, N] 时,下标本身就是指针 —— 每个元素都自己知道该回到哪里。要么把它们逐个换回家完成排序,要么就地翻转符号来标记已见的下标, 就能在线性时间、常数额外空间里解决一整族「缺失 / 重复 / 消失」问题。

在上面选一个子模式。每个子模式都可以单独跳转 —— 从题目最像的那个开始。

↑ 选一个

— / 什么时候用哪个

经典循环排序
当输入可变且需要每个元素物理上回到它对应的下标位置时使用 —— 例如找出所有缺失或重复的值。
换回家 · LC 268 · LC 448
下标标记
当只关心每个下标是否出现过、想用一遍标记 + 一遍读取解决时使用 —— 把 arr[|x|−1] 取反来记录「已见」。
符号翻转 · LC 442 · LC 41