题目来源
题目
给定一个包含红色,白色,蓝色,一同 n 个元素的数组,对其进行排序使得相同的颜色相邻并且按照红色,白色,蓝色的顺序排序。
数组中 0 代表红色,1 代表白色,2 代表蓝色。
数据范围:1≤n≤100 , 数组中只包含 0 1 2。
示例
1 示例1
输入 [0,2,1]
返回值 [0,1,2]
2 示例2
输入 [0,0,2,0]
输出 [0,0,0,2]
分析
方法一 直接使用sort()方法
因为给定的数组是一个整型数组,数组中 0 代表红色,1 代表白色,2 代表蓝色,因此直接利用Arrays包中的sort函数对colors数组进行排序,直接返回,即可得到结果。
public class Solution {
public int[] sortColor (int[] colors) {
Arrays.sort(colors);
return colors;
}
}
方法二 对数组重新赋值
统计colors数组中红色,白色,蓝色的个数,即0,1,2的个数,然后对数组重新赋值。
import java.util.*;
public class Solution {
public int[] sortColor (int[] colors) {
int count_red=0;
int count_white=0;
int count_blue=0;
for(int i=0;i<colors.length;i++){
if(colors[i]==0){
count_red++;
}
else if(colors[i]==1){
count_white++;
}
else{
count_blue++;
}
}
for(int i=0;i<count_red;i++){
colors[i]=0;
}
for(int i=count_red;i<count_red+count_white;i++){
colors[i]=1;
}
for(int i=count_white+count_red;i<colors.length;i++){
colors[i]=2;
}
return colors;
}
}
方法三 设置区间
将colors数组分为三个区间,[0,i)为零区间,j为循环变量,如果colors[j]==0,则将colors[i]与colors[j]互换,并将i++;如果colors[j]==2,则将colors[j]与colors[k]互换,并将k--,因为交换后colors[j]未处理,则将j--。
import java.util.*;
public class Solution {
public int[] sortColor (int[] colors) {
// write code here
int i=0;
int j=0;
int k=colors.length-1;
for(;j<=k;j++){
if(colors[j]==0){
colors[j]=colors[i];
colors[i]=0;
i++;
}
else if(colors[j]==2){
colors[j--]=colors[k];
colors[k--]=2;
}
}
return colors;
}
}
以上就是解决颜色分类的三种方法。