Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue.
Here, we will use the integers 0, 1, and 2 to represent the color red, white, and blue respectively.
Note:
You are not suppose to use the library's sort function for this problem.
1 桶排序的转换应用,基础。
2 关键点是最后设置新的数组的边界的时候,要注意,最好多测试一下,就清楚了。
3 最近突然想到新的方法,只要一遍遍历: 有2个坐标,分别代表0,2 目前应该放的位子。还有个坐标cur,当cur碰到新的数,3中可能:
3.1 如果是1 ,继续前进
3.2 如果是0 ,和0应该放的位子交换,0的位子加一,目前的位子加一。(交换过来的要么是0,要么是1,无需继续检查)
3.3 如果是2,和2应该放的位子交换,2的位子减一。
public class Solution {
public void sortColors(int[] A) {
if(A.length==0){
return ;
}
int[] ref = new int[3];
int n = A.length;
for(int i=0;i<n;i++){
int temp = A[i];
ref[temp]++;
}
for(int i=0;i<ref[0];i++){
A[i]=0;
}
for(int i=ref[0];i<ref[0]+ref[1];i++){
A[i]=1;
}
for(int i=ref[0]+ref[1];i<ref[0]+ref[1]+ref[2];i++){
A[i]=2;
}
}
}