题意:
        给定一个包含红色,白色,蓝色,一同 n 个元素的数组,对其进行排序使得相同的颜色相邻并且按照 红色,白色,蓝色的顺序排序。
        数组中 0 代表红色,1 代表白色,2 代表蓝色。


方法一:
快排

思路:
        根据题意可知,数值的顺序要从小到大,因此快排即可。


class Solution {
public:
    
    vector<int> sortColor(vector<int>& colors) {
        sort(colors.begin(),colors.end());//排序
        return colors;
    }
};

时间复杂度:
空间复杂度:

方法二:
计数排序

思路:
        首先,遍历数组对值计数统计(计数排序);
        之后,再次遍历数组,用新值覆盖原值。



class Solution {
public:
    int cnt[5]={0};
    vector<int> sortColor(vector<int>& colors) {
        int n=colors.size();
        for(int i=0;i<n;i++){//计数排序
            cnt[colors[i]]++;
        }
        int j=0;
        for(int i=0;i<n;i++){//遍历数组,用新值覆盖原值
            if(cnt[j]==0){
                j++;
            }
            colors[i]=j;
            cnt[j]--;
        }
        return colors;
    }
};

时间复杂度:
空间复杂度: