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



京公网安备 11010502036488号