题意:
给定一个包含红色,白色,蓝色,一同 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; } };
时间复杂度:空间复杂度: