leetcode 75 颜色分类
双指针法,分别指向下一个0的位置与下一个1的位置,值得注意的是,在遇到p0<p1,也就是p0当前位置指向一个1的时候,在i指向的数据与p0指向的数据交换后,需要将i指向的数据再次与p1指向的进行交换,因为第一步操作一定换出去了一个1。完成这一操作后,p0与p1都加1。贴代码
1 class Solution { 2 public: 3 void sortColors(vector<int>& nums) 4 { 5 int p_0 = 0; 6 int p_1 = 0; 7 int n = nums.size(); 8 for(int i = 0 ; i < n ; i++) 9 { 10 if(nums[i] == 1) 11 { 12 swap(nums[i],nums[p_1]); 13 p_1++; 14 } 15 else if(nums[i] == 0) 16 { 17 swap(nums[i],nums[p_0]); 18 if(p_0<p_1) 19 swap(nums[i],nums[p_1]); 20 p_0++; 21 p_1++; 22 } 23 } 24 } 25 };
还有一种双指针的办法,其实是一样的,殊途同归。
1 class Solution { 2 public: 3 void sortColors(vector<int>& nums) 4 { 5 int zero = 0; 6 int two = nums.size(); 7 int i = 0; 8 while(i<two) 9 { 10 if(nums[i] == 0) 11 { 12 swap(nums[i],nums[zero]); 13 zero++; 14 i++; 15 } 16 else if(nums[i] == 1) 17 i++; 18 else 19 { 20 two--; 21 swap(nums[i],nums[two]); 22 } 23 } 24 } 25 };

浙公网安备 33010602011771号