美文网首页
75.颜色分类

75.颜色分类

作者: 最尾一名 | 来源:发表于2020-03-04 15:03 被阅读0次

原题

https://leetcode-cn.com/problems/sort-colors/

解题思路

荷兰国旗问题。

用三个指针,分别是:pre 表示 0 的右边界、current 表示当前访问到的元素、post 表示 2 的左边界。
即 nums[i < pre] === 0; nums[i > post] === 2;

遍历一遍,

  • 当 nums[current] === 0 时,交换 nums[current] 与 nums[pre],pre 和 current 都右移一位。
  • 当 nums[current] === 1 时,current 都右移一位。
  • 当 nums[current] === 2 时,交换 nums[current] 与 nums[post],post 左移一位。

注意:用 if 会比 switch 花费更少的时间

代码

/**
 * @param {number[]} nums
 * @return {void} Do not return anything, modify nums in-place instead.
 */
const swap = (arr, index1, index2) => {
    const temp = arr[index1];
    arr[index1] = arr[index2];
    arr[index2] = temp;
}

var sortColors = function(nums) {
    if (nums.length < 2) return;
    let pre = 0, current = 0, post = nums.length - 1;
    while (current <= post) {
        if (nums[current] === 2) {
            swap(nums, current, post);
            --post;
        } else if (nums[current] === 1) {
            ++current;
        } else {
            swap(nums, current, pre);
            ++current;
            ++pre;
        }
    }
};

复杂度

  • 时间复杂度 O(N)
  • 空间复杂度 O(1)

相关文章

  • 75.颜色分类

    题目给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、...

  • 75. 颜色分类

    题目描述 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照...

  • 75. 颜色分类

    【题目描述】 【示例】 【进阶】 代码实现【解1】 看看就行啦 ? 【解2】思路:1、使用三个指针来标识数组左边、...

  • 75. 颜色分类

    题目描述 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照...

  • 75.颜色分类

    原题 https://leetcode-cn.com/problems/sort-colors/ 解题思路 荷兰国...

  • 75.颜色分类

    题目描述 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照...

  • 75. 颜色分类

    【Description】给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的...

  • 75. 颜色分类

    我觉得这道题的解法应该属于双指针吧,我大概记录一下我理解的思路,就是一个指针zero指向-1,一个two指向数组的...

  • 75. 颜色分类

    75. 颜色分类 问题 给定一个包含红色、白色和蓝色,一共 个元素的数组,原地对它们进行排序,使得相同颜色的元素...

  • 75. 颜色分类

    解法

网友评论

      本文标题:75.颜色分类

      本文链接:https://www.haomeiwen.com/subject/wcwvlhtx.html