看到这题目描述的第一感觉就是冒泡排序:
/**在这里插入图片描述
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var sortColors = function(nums) {
const len = nums.length - 1;
for(let i = 0; i <= len; i++) {
for (let j = i + 1; j <= len; j++) {
if (nums[j] < nums[i]) {
[nums[i], nums[j]] = [nums[j], nums[i]];
}
}
}
};
结果速度和内存都快垫底了,换个思路:
用三个指针分成三部分,遍历一遍即可
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var sortColors = function(nums) {
let right = nums.length - 1;
let left = 0;
let cur = 0;
while(cur <= right) {
switch(nums[cur]) {
case 0:
[nums[left], nums[cur]] = [nums[cur], nums[left]];
left++;
cur++;
break;
case 2:
[nums[right], nums[cur]] = [nums[cur], nums[right]];
right--;
break;
default:
cur++;
break;
}
}
};