题解 | #颜色分类#

颜色分类

http://www.nowcoder.com/practice/52e04ddb7b5640a8869c2d3da2ad3344

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

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




全部评论

相关推荐

专业嗎喽:个人信息名字太大,合到电话邮箱那一栏就行,有党员写过党,剩下其他全删,站空太大了 把实习经历丰富,放最前面,然后是个人评价,技能之类的,然后是学校信息。项目经历最后面,可以就选一个自己擅长的。 现在是学校不是92就扣分的,没必要放前面。 然后现在看重实习经历>竞赛经历(校园经历)>课程项目经历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务