给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
思路:将红色和蓝色排在两边,中间剩的就是白色了;另一种是遍历一遍数组,统计各种颜色数量后输出,但是没有前者快
class Solution {public void sortColors(int[] nums) {int red = 0;int blue = nums.length - 1;for(int i = 0;i<blue+1;i++){if(nums[i] == 0){nums[red++] = 0;}//将蓝色部分要置换到前面来,不能像红色那样直接覆盖,因为还没有遍历else if(nums[i] == 2){int temp = nums[i];nums[i] = nums[blue];nums[blue--] = temp;i--;}}for(int white = red;white<=blue;white++)//把中间设为白色nums[white] = 1;}
}