classSolution{public:voidsortColors(vector<int>& nums){// 只有0,1,2三个数// 第一次遍历将0换到开头,第二次将1换到0后面int id =0, size = nums.size();for(int i =0; i < size; i++){if(nums[i]==0){swap(nums[i], nums[id++]);}}for(int i =0; i < size; i++){if(nums[i]==1){swap(nums[i], nums[id++]);}}}};
第二种做法:
classSolution{public:voidsortColors(vector<int>& nums){int zero =0, two = nums.size()-1, cur =0;while(cur <= two){// =: 因为此时two位置的元素还没有遍历if(nums[cur]==0){swap(nums[zero++], nums[cur++]);}elseif(nums[cur]==1){++cur;}else{swap(nums[cur], nums[two--]);// 因为可能2和2交换,所以cur不动}}}};