LintCode(101)刪除排序陣列中的重複數字 II
阿新 • • 發佈:2019-01-03
題目
跟進“刪除重複數字”:
如果可以允許出現兩次重複將如何處理?
您在真實的面試中是否遇到過這個題? Yes 樣例給出陣列A =[1,1,1,2,2,3],你的函式應該返回長度5,此時A=[1,1,2,2,3]。
分析
與上題思路相同,只需要增加一個記錄元素出現次數的變數即可,限制最多出現2次。Python程式碼
class Solution: """ @param A: a list of integers @return an integer """ def removeDuplicates(self, A): # write your code here if len(A) == 0: return 0 times = 1 k = 0 for i in range(1,len(A)): if A[i] != A[k]: k += 1 A[k] = A[i] times = 1 else: if times >= 2: continue else: k += 1 A[k] = A[i] times += 1 del A[k+1:len(A)] return len(A)
C++程式碼
GitHub -- C++程式碼/* 101 刪除排序陣列中的重複數字 II 跟進“刪除重複數字”: 如果可以允許出現兩次重複將如何處理? 您在真實的面試中是否遇到過這個題? Yes 樣例 給出陣列A =[1,1,1,2,2,3],你的函式應該返回長度5,此時A=[1,1,2,2,3]。 */ class Solution { public: /** * @param A: a list of integers * @return : return an integer */ int removeDuplicates(vector<int> &nums) { // write your code here if(nums.empty()) { return 0; }//if int n = nums.size(), k=0, times=1; for(int i=1; i<n; ++i) { if(nums[i] != nums[k]) { nums[++k] = nums[i]; times = 1; }else if(nums[i] == nums[k]){ if(times >= 2) { continue; }else{ nums[++k] = nums[i]; ++times; }//else }//elif }//for nums.resize(k+1); return k+1; } };