75 颜色分类
题目:
给定一个包含红色、白色和蓝色,一共n个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
示例:
输入: [2,0,2,1,1,0]
输出: [0,0,1,1,2,2]
直观思路:
两次遍历数组,第一次遍历时记录下红白蓝三色(0、1、2)分别出现的次数,第二次遍历时重写当前数组
只用一次遍历的方法:
同荷兰国旗问题的解决方法类似。方法阐述见代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| public void sortColors(int[] nums) { int red = -1; int blue = nums.length; int cur = 0; while(cur < blue){ if(nums[cur] == 0) swap(nums, ++red, cur++); else if(nums[cur] == 2) swap(nums, --blue, cur); else cur++; } } public void swap(int[] nums, int i, int j){ int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; }
|