leetcode 75颜色分类

 

两趟扫描,由于排序变量的特殊性,使用计数排序方法可以明显降低至O(n)time O(n) space

关于计数排序:https://mp.weixin.qq.com/s/WGqndkwLlzyVOHOdGK7X4Q

class Solution {
public:
    void sortColors(vector<int>& nums) {
        if(nums.size()==0) return;
        int len=nums.size();
        vector<int> arr(3,0);
        for(int num:nums)
            arr[num]++;
        int index=0;
        for(int i=0;i<arr.size();i++){
            int k=arr[i];
            while(k--){
                nums[index++]=i;
            }
        }
    }
};

 使用3个变量一趟扫描O(1) space O(n) time

/**
使用3个变量来分别表示3个颜色;
**/

class Solution {
public:
    void sortColors(vector<int>& nums) {
        if(nums.size()==0) return;
        int len=nums.size();
        int L=0,M=0,H=len-1;
        while(M<=H){
            if(nums[M]==1){
                M++;continue;
            }
            if(M<=H&&nums[M]==0){
                swap(nums[M],nums[L]);
                L++;M++;
            }
            if(M<=H&&nums[M]==2){
                swap(nums[M],nums[H]);
                H--;
            }
        }
    }
};

 具体实现过程参见:https://leetcode.com/problems/sort-colors/discuss/26474/Sharing-C%2B%2B-solution-with-Good-Explanation

 

posted @ 2019-05-27 16:13  Joel_Wang  阅读(197)  评论(0编辑  收藏  举报