LeetCode——分类颜色

Q:给定一个包含红色、白色和蓝色,一共n个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排序。
此题中,我们使用整数0、1和2分别表示红色、白色和蓝色。
【示例】
输入:[2, 0, 2, 1, 1, 0]
输出:[0, 0, 1, 1, 2, 2]
【注意】
不能使用代码库中的排序函数来解决这道题。
A:
这里使用计数排序。可以看:https://www.cnblogs.com/bqwzx/p/11029264.html
设置一个map,key分别为0,1,2,记录数量,然后按照数量输出(这里用int[]实现的,我发现用map太麻烦了……)

    public static void sortColors(int[] num) {
        int[] color = new int[3];
        if (num == null || num.length == 0)
            return;
        for (int i = 0; i < num.length; i++) {
            color[num[i]]++;
        }
        for (int i = 0; i < num.length; ) {
            for (int j = 0; j < 3; j++) {
                while (color[j]-- != 0) {
                    num[i++] = j;
                }
            }
        }
    }

猜你喜欢

转载自www.cnblogs.com/xym4869/p/12543047.html