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--; } } } };