【leetcode】75. 颜色分类

98 阅读1分钟

leetcode-75.png

  • 使用三个指针:lowmid 和 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--
        }
    }
};