一、题目
给定一个包含红色、白色和蓝色、共 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]
五、总结
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_47450807/article/details/123254562
内容来源于网络,如有侵权,请联系作者删除!