列表

详情


NC212. 颜色分类

描述

给定一个包含红色,白色,蓝色,一同 n 个元素的数组,对其进行排序使得相同的颜色相邻并且按照 红色,白色,蓝色的顺序排序。

数组中 0 代表红色,1 代表白色,2 代表蓝色。

数据范围: , 数组中只包含 0 1 2。

示例1

输入:

[0,2,1]

输出:

[0,1,2]

示例2

输入:

[0,0,2,0]

输出:

[0,0,0,2]

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 2ms, 内存消耗: 412KB, 提交时间: 2021-11-20

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param colors int整型vector 
     * @return int整型vector
     */
    vector<int> sortColor(vector<int>& colors) {
        // write code here
        int fir = 0;

        for(int i = 0; i< 2;i++){
            int end = colors.size()-1;
            while(end > fir){
                while(colors[fir] == i) fir++;
                if(colors[end] == i && end > fir) {
                    int a = colors[fir];
                    colors[fir] = colors[end];
                    colors[end] = a;
                    //cout<< fir<<" ";
                }
                else end--;
            }

        }
        return colors;
    }
};

C++ 解法, 执行用时: 3ms, 内存消耗: 320KB, 提交时间: 2022-05-07

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param colors int整型vector 
     * @return int整型vector
     */
    vector<int> sortColor(vector<int>& colors) {
        // write code here
        int i = 1;
        int left = 0;
        int right = colors.size()-1;
        while(i<=right){
            if(colors[i]==0){
                swap(colors[i],colors[left]);
                left++;
                if(i == left)
                    i++;
            }else if(colors[i] == 2){
                swap(colors[i],colors[right]);
                right--;
            }else{
                i++;
            }
        }
        return colors;
    }
};

C++ 解法, 执行用时: 3ms, 内存消耗: 384KB, 提交时间: 2022-05-10

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param colors int整型vector 
     * @return int整型vector
     */
    vector<int> sortColor(vector<int>& colors) {
        // write code here
        int zero = -1;
        int two = colors.size();
        for (int i = 0; i < two;) {
            if (colors[i] == 0) {
                colors[i++] = colors[++zero];
                colors[zero] = 0;
            } else if (colors[i] == 2) {
                colors[i] = colors[--two];
                colors[two] = 2;
            } else {
                i++;
            }
        }
        return colors;
    }
};

C++ 解法, 执行用时: 3ms, 内存消耗: 384KB, 提交时间: 2022-01-17

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param colors int整型vector 
     * @return int整型vector
     */
    vector<int> sortColor(vector<int>& colors) {
        int i1=0,i2=0;
        for(auto i: colors)
        {
            if(i==0) i1++;
            if(i==1) i2++;
        }
        for(int i=0;i<colors.size();i++)
        {
            if(i<i1) colors[i]=0;
            if(i>=i1&&i<i1+i2) colors[i]=1;
            if(i>=i1+i2) colors[i]=2;
        }
        return colors;
    }
};

C++ 解法, 执行用时: 3ms, 内存消耗: 384KB, 提交时间: 2022-01-08

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param colors int整型vector 
     * @return int整型vector
     */
    vector<int> sortColor(vector<int>& colors) {
        // write code here
        int num0 = 0;
        int num1 = 0;
        int num2 = 0;
        vector<int> ans(colors.size());
        for (auto& c : colors) {
            if (c == 0) {
                ans[num2++] = 2;
                ans[num1++] = 1;
                ans[num0++] = 0;
            } else if (c == 1) {
                ans[num2++] = 2;
                ans[num1++] = 1;
            } else {
                ans[num2++] = 2;
            }
        }
        return ans;
    }
};

上一题