刷题75. Sort Colors

Posted siweihz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刷题75. Sort Colors相关的知识,希望对你有一定的参考价值。

一、题目说明

题目75. Sort Colors,给定n个整数的列表(0代表red,1代表white,2代表blue),排序实现相同颜色在一起。难度是Medium。

二、我的解答

这个是一个排序,还是简单的,代码如下:

class Solution{
    public:
        void sortColors(vector<int>& nums){
            int num0=0,num1=0,num2=0;
            for(int i=0;i<nums.size();i++){
                if(nums[i]==0) num0++;
                if(nums[i]==1) num1++;
                if(nums[i]==2) num2++;
            }
            
            for(int j=0;j<nums.size();j++){
                if(j<num0) nums[j] = 0;
                else if(j<num0+num1) nums[j] = 1;
                else nums[j] = 2;
            }
        }
};

性能如下:

Runtime: 8 ms, faster than 10.95% of C++ online submissions for Sort Colors.
Memory Usage: 8.6 MB, less than 77.19% of C++ online submissions for Sort Colors.

三、优化措施

上述代码是2此遍历,其实只需要1此遍历,题目比较简单除此之外就不优化了:

class Solution{
    public:
        void sortColors(vector<int>& nums){
            int left=0,right=nums.size()-1;
            while(left<right){
                while(left<right && nums[left]==0){
                    left++;
                }
                while(left<right && nums[right]==2){
                    right--;
                }
                if(left<right && nums[left]==2 && nums[right]==0){
                    swap(nums[left],nums[right]);
                    left++;
                    right--;
                }else{
                    for(int t=left+1;t<=right;t++){
                        if(nums[t]==0){
                            swap(nums[left],nums[t]);
                            left++;
                            break;
                        }else if(nums[t]==2){
                            swap(nums[t],nums[right]);
                            right--;
                            break;
                        }else if(t==right){
                            swap(nums[right],nums[left]);
                            left++;
                            right--;
                            break;
                        }
                    }                   
                }

            }
        }
};

性能如下:

Runtime: 0 ms, faster than 100.00% of C++ online submissions for Sort Colors.
Memory Usage: 8.7 MB, less than 77.19% of C++ online submissions for Sort Colors.

以上是关于刷题75. Sort Colors的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 75. 颜色分类(Sort Colors) 30

LeetCode 75. 颜色分类(Sort Colors)

75. Sort Colors

[leetcode sort]75. Sort Colors

Leetcode 75. Sort Colors

75. Sort Colors