Leetcode---颜色分类--计数排序

颜色分类

题目链接:颜色分类

思路:
  • 本题利用计数排序非常简单,仅需要定义一个长度为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;
			}
		}
    }

你可能感兴趣的:(算法)