题目中的方法:
class Solution { public: void sortColors(vector<int>& nums) { int cnt0,cnt1,cnt2; cnt0=cnt1=cnt2=0; for(int i=0;i<nums.size();++i){ if(nums[i]==0) cnt0++; else if(nums[i]==1) cnt1++; else cnt2++; } int i=0; while(cnt0--){ nums[i]=0; i++; } while(cnt1--){ nums[i]=1; i++; } while(cnt2--){ nums[i]=2; i++; } } };***类似快排的方法:
class Solution { public: void sortColors(vector<int>& nums) { int i=0,j=0,k=nums.size()-1; //0~i-1:红色区域,k+1~n-1:蓝色区域 while(j<=k){ switch(nums[j]){ case 0: swap(nums[i],nums[j]);i++;j++;break; //红的换到前面 case 1: j++;break; //白的看下一个 case 2: swap(nums[k],nums[j]);k--; //蓝的换到后面 } } } };