-
使用三个指针:
low、mid和high。low指向当前已处理的最后一个 0 的位置。mid用于遍历数组。high指向当前已处理的第一个 2 的位置。
-
遍历数组:
- 如果
nums[mid]是 0,将其与nums[low]交换,low和mid都向右移动。 - 如果
nums[mid]是 1,只需移动mid。 - 如果
nums[mid]是 2,将其与nums[high]交换,并将high向左移动(不移动mid,因为需要检查交换过来的元素)。
- 如果
var sortColors = function (nums) {
let slow = 0
let mid = 0
let fast = nums.length - 1
while (mid <= fast) {
if (nums[mid] === 0) {
[nums[slow], nums[mid]] = [nums[mid], nums[slow]]
slow++
mid++
} else if (nums[mid] === 1) {
mid++
} else {
[nums[fast], nums[mid]] = [nums[mid], nums[fast]]
fast--
}
}
};