leetcode 75颜色分类

博客介绍了排序算法,提到两趟扫描时因排序变量特殊性,用计数排序可将复杂度降至O(n) time O(n) space,还给出计数排序相关链接。此外,介绍使用3个变量一趟扫描的方法,复杂度为O(1) space O(n) time,并给出具体实现过程链接。

 

两趟扫描,由于排序变量的特殊性,使用计数排序方法可以明显降低至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

 

转载于:https://www.cnblogs.com/joelwang/p/10931303.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值