LeetCode26

至此,第一部分,双指针结束。

该题对应双指针最后两题之一,无额外空间的就地替换。


C++ 方法:


  1. #include   
  2. #include   
  3.   
  4. using namespace std;    
  5. int removeDuplicates(vector<int>& nums){  
  6.     int len = nums.size();  
  7.     if (0 == len) return 0;  
  8.     if (1 == len) return 1;  
  9.     vector<int>::iterator iter1 = nums.begin();  
  10.     vector<int>::iterator iter2 = iter1;  
  11.     vector<int>::iterator iterEnd = nums.end();  
  12.     iter2++;  
  13.   
  14.     while (iterEnd != iter2)  
  15.     {  
  16.         if (*iter1 == *iter2)  
  17.         {  
  18.             iter2++;  
  19.             len--;  
  20.         }  
  21.         else  
  22.         {  
  23.             iter1++;  
  24.             swap(*iter1, *iter2);  
  25.             iter2++;  
  26.         }  
  27.     }  
  28.     return len;  
  29. }  
  30.   
  31. void showVector(const vector<int>& nums){  
  32.     for each (int i in nums)  
  33.     {  
  34.         cout << i << " ";  
  35.     }  
  36.     cout << endl;  
  37. }  

  1. int main()  
  2. {  
  3.     vector<int> nums;  
  4.     nums.push_back(2);  
  5.     nums.push_back(1);  
  6.     nums.push_back(3);  
  7.     nums.push_back(0);  
  8.     nums.push_back(1);  
  9.     nums.push_back(1);  
  10.     nums.push_back(0);  
  11.     nums.push_back(3);  
  12.     nums.push_back(3);  
  13.     nums.push_back(1);  
  14.     nums.push_back(3);  
  15.   
  16.     cout << removeDuplicates(nums);  
  17.   
  18.     return 1;  
  19. }  
  

你可能感兴趣的:(Algorithm)