LintCode(100)刪除排序陣列中的重複數字
阿新 • • 發佈:2019-02-07
題目
給定一個排序陣列,在原陣列中刪除重複出現的數字,使得每個元素只出現一次,並且返回新的陣列的長度。
不要使用額外的陣列空間,必須在原地沒有額外空間的條件下完成。
您在真實的面試中是否遇到過這個題? Yes 樣例給出陣列A =[1,1,2],你的函式應該返回長度2,此時A=[1,2]。
分析
對排序陣列去重,要求空間複雜度為O(1) 遍歷一次陣列,將不重複元素保留,重複元素被覆蓋,最後刪除末尾剩餘的元素即可。Python程式碼
# #100 刪除排序陣列中的重複數字 # class Solution: """ @param A: a list of integers @return an integer """ def removeDuplicates(self, A): # write your code here k=0 for i in range(1,len(A)): if A[i] != A[k]: k+=1 A[k] = A[i] del A[k+1:len(A)] return len(A)
C++程式碼
GitHub -- C++程式碼/* 100 刪除排序陣列中的重複數字 給定一個排序陣列,在原陣列中刪除重複出現的數字,使得每個元素只出現一次,並且返回新的陣列的長度。 不要使用額外的陣列空間,必須在原地沒有額外空間的條件下完成。 您在真實的面試中是否遇到過這個題? Yes 樣例 給出陣列A =[1,1,2],你的函式應該返回長度2,此時A=[1,2]。 */ 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; for(int i=1;i<n;++i) { if(nums[i] != nums[k]) { nums[++k] = nums[i]; }//if }//for nums.resize(k+1); return k+1; } };