Leetcode刷题(第75题)——颜色分类

x33g5p2x  于2022-03-03 转载在 其他  
字(0.7k)|赞(0)|评价(0)|浏览(134)

一、题目

给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
必须在不使用库的sort函数的情况下解决这个问题。

二、示例

示例一:
输入:nums = [2,0,2,1,1,0]
输出:[0,0,1,1,2,2]

示例二:
输入:nums = [2,0,1]
输出:[0,1,2]

三、思路
本题我们可以使用指针指向第一个位置,然后遍历整个数组,如果遇到值为0的则直接交换两者的值,并且让指针指向下一个位置。然后再进行一次遍历,就是从当前指针所指的位置开始,向后遍历,碰到值为1的,则进行交换位置。

例如:[2,0,2,1,1,0]
第一次循环后的结果为:[0,0,2,1,1,2]
第二次循环后的结果为:[0,0,1,1,2,2]

四、代码解析

/**
 * @param {number[]} nums
 * @return {void} Do not return anything, modify nums in-place instead.
 */
var sortColors = function(nums) {
    let length = nums.length
    let p1 = 0
    for(let i = 0; i < length ; i++) {
        if(nums[i] === 0) {
            [nums[p1], nums[i]] = [nums[i],nums[p1]]
            p1++
        }
    }
    for(let j = p1; j < length; j++) {
        if(nums[j] === 1) {
            [nums[j], nums[p1]] = [nums[p1], nums[j]]
            p1++
        }
    }
    return nums
};
// [2,0,2,1,1,0]

五、总结

相关文章

微信公众号

最新文章

更多