颜色分类
题目链接:颜色分类
思路:
- 本题利用计数排序非常简单,仅需要定义一个长度为3的一维数组
- 利用数组存储每一种颜色出现的数量,再通过该数组对原数组进行重排
- 重排时仅需要将定义的数组的下标赋值给原数组即可
- 本题下面给出的进阶要求没有读明白:你能想出一个仅使用常数空间的一趟扫描算法吗?难道3种颜色不算是常数空间的数组吗?有大神路过还请赐教
public void sortColors(int[] nums) {
//计数排序
int[] color = new int[3];
for(int num:nums) {
color[num]++; //将颜色叠加
}
int k=0;
for(int j=0;j<3;j++) {
while(color[j]--!=0) {
nums[k++]=j;
}
}
}