Leetcode 75. Sort Colors
题目链接: Sort Colors
难度:Medium
题目大意:
0,1,2分布表示红,白,蓝三种颜色,输入一个数组,只含有0,1,2,要求将三种颜色进行排序,相同的颜色要求相邻,不同颜色按红白蓝排列。
思路:
思路1
其实就是把数组按0,1,2的顺序进行排列,因为题目要求不能使用sort()函数,所以先统计0,1,2的个数,然后对输入的数组进行修改即可。leetcode讨论区有大佬用双指针。
思路2(一次遍历):
思路1需要遍历数组两次,如果要求只遍历一次,需要用三指针,把0全部换到数组的左侧,2换到数组的右侧。
代码
思路1:
class Solution {
public void sortColors(int[] nums) {
int count[]=new int[3];
for(int n:nums){
count[n]++;//统计0,1,2的个数
}
int j=0;
for(int i=0;i<3;i++){
while(count[i]-->0){
nums[j++]=i;
}
}
}
}
思路2:
class Solution {
public void sortColors(int[] nums) {
int n=nums.length;
int zero=0,second=n-1;//zero左边都是0,second右边都是2
int i=0;
while(i<=second){
if(nums[i]==0){
int temp=nums[i];
nums[i]=nums[zero];
nums[zero]=temp;
zero++;
i++;
}
else if(nums[i]==1){
i++;
}
else{
int temp=nums[i];
nums[i]=nums[second];
nums[second]=temp;
second--;
}
}
}
}