class Solution { public: void sortColors(vector<int>& nums) { int i = 0; int j = nums.size()-1; int left = 0; int right = nums.size()-1; // 遍for循环,第一遍 移动0; while(i<=nums.size()-1){ if(nums[i]==0){ int temp = nums[i]; nums[i] = nums[left]; nums[left] = temp; left++; } i++; } // 第二遍移动2; while(j>=0){ if(nums[j]==2){ int temp = nums[j]; nums[j] = nums[right]; nums[right] = temp; left++; right--; } j--; } return; } };
只需一次遍历
class Solution { public: void sortColors(vector<int>& nums) { int left = 0; // 令左指针左边的数都为1 int right = nums.size()-1; // 令右指针右边的数都为2 int i = 0; // i进行遍历, // 遍for循环,第一遍 移动0; while(i<=right){ if(nums[i]==0){ int temp = nums[i]; nums[i] = nums[left]; nums[left] = temp; left++; i++; }else if(nums[i]==2){ int temp = nums[i]; nums[i] = nums[right]; nums[right] = temp; right--; // 不执行i++,因为还需要判断交换后的值 }else{ i++; } } return; } };