1. 程式人生 > >【LeetCode & 劍指offer刷題】陣列題6:26. Remove Duplicates from Sorted Array

【LeetCode & 劍指offer刷題】陣列題6:26. Remove Duplicates from Sorted Array

【LeetCode & 劍指offer 刷題筆記】目錄(持續更新中...)

26. Remove Duplicates from Sorted Array

Given a sorted array   nums , remove the duplicates  in-place   such that each element appear only  once  and return the new length.
Do not allocate extra space for another array, you must do this by   modifying the input array  in-place  with O(1) extra memory. Example 1: Given nums = [1,1,2] ,   Your function should return length =
2 , with the first two elements of nums being 1 and 2 respectively.   It doesn't matter what you leave beyond the returned length. Example 2: Given nums
= [0,0,1,1,1,2,2,3,3,4] ,   Your function should return length = 5 , with the first five elements of nums being modified to 0 , 1 , 2 , 3 , and 4 respectively.   It doesn't matter what values are set beyond the returned length. Clarification: Confused why the returned value is an integer but your answer is an array? Note that the input array is passed in by   reference , which means modification to the input array will be known to the caller as well. Internally you can think of this: // nums is passed in by reference. (i.e., without making a copy) int len = removeDuplicates(nums);   // any modification to nums in your function would be known by the caller. // using the length returned by your function, it prints the first len elements. for (int i = 0; i < len; i++) { print(nums[i]); }   /* 問題:去除有序序列中的重複數字 方法一:雙指標法(覆蓋法) 當a[i] != a[index-1] 用a[i]覆蓋a[index] 相等時不覆蓋,不等時覆蓋,index代表了新陣列的索引,i代表了舊陣列索引, 將無重複數依次移動到前面 如:  1 2 2(index) 2 3(i) 3 4 5 a[index] = a[i]; index++; O(n),O(1) */ class Solution { public :     int removeDuplicates ( vector < int >& a )     {         if ( a . empty ()) return 0 ;                 int index = 1 ; //初始時index和i指標均指向索引為1的位置         for ( int i = 1 ; i < a . size (); i ++) //用i指標掃描陣列         {             if ( a [ i ] != a [ index - 1 ]) //遇到不等數時,覆蓋a[index],index++             {                 a [ index ] = a [ i ];                 index ++;             } //index最後指向無重複序列末尾         }         return index ; //返回無重複序列的長度     } };   80 .   Remove Duplicates from Sorted Array II 描述: Follow up for ”Remove Duplicates”: What if duplicates are allowed at most twice? For example, Given sorted array A = [1,1,1,2,2,3] , Your function should return length = 5, and A is now [1,1,2,2,3]   /* 覆蓋法 如: 1 2 2 2(index) 3(i) 3 4 5 a[index] = a[i]; index++; O(n),O(1) */ class Solution { public :     int removeDuplicates ( vector < int >& a )     {         int n = a . size ();         if ( n <= 2 ) return n ;                 int index = 2 ;         for ( int i = 2 ; i < n ; i ++)         {             if(a[i] != a[index - 2])             {                 a [ index ] = a [ i ];                 index ++;             }         }         return index ;     } };