标签:数组 leetcode || 数组排序 anything 排序 ase length mod
颜色排序,中文又叫做荷兰国旗。好吧,题意是给一个数组,里面只有0,1,2三个数字,把数组排序成[0, 0, 0, 1, 1, 1, ....1, 2, 2, 2, 2, 2]的样子。
思路是two pointer夹逼扫描,遇到0就放在左起当前的位置,遇到1就不处理,遇到2就放在右起当前位置。代码如下,
时间O(n)
空间O(1)
1 /** 2 * @param {number[]} nums 3 * @return {void} Do not return anything, modify nums in-place instead. 4 */ 5 var sortColors = function(nums) { 6 // corner case 7 if (nums.length === 0 || nums === null) return; 8 9 // normal case 10 let left = 0; 11 let right = nums.length - 1; 12 let cur = 0; 13 while (cur <= right) { 14 if (nums[cur] === 0) { 15 swap(nums, cur, left); 16 cur++; 17 left++; 18 } else if (nums[cur] === 1) { 19 cur++; 20 } else { 21 swap(nums, cur, right); 22 right--; 23 } 24 } 25 }; 26 27 var swap = function(nums, i, j) { 28 let temp = nums[i]; 29 nums[i] = nums[j]; 30 nums[j] = temp; 31 };
标签:数组 leetcode || 数组排序 anything 排序 ase length mod
原文地址:https://www.cnblogs.com/aaronliu1991/p/11689560.html