C++ 中從已排序陣列中刪除重複項


假設我們有一個已排序陣列 nums,我們需要就地刪除其中的重複項,使得重複元素最多出現兩次,並返回新的長度。為此,我們不能使用額外的空間。我們必須使用 O(1) 的空間量來解決此問題。例如,如果陣列像 [0,0,0,1,1,1,1,2,3,3],那麼輸出將為 [0,0,1,1,2,3,3],長度為 7

讓我們看看步驟 -

  • len := 2 和 n := 陣列大小
  • 如果 n <= 2,則返回 n
  • 對於 i := 2 至 n
    • 如果 nums[i] != nums[len - 2] 或 nums[i] != nums[len - 1]
      • nums[len] := nums[i],並將 len 加 1
  • 返回 len

為了更好地理解,讓我們看看以下實現 -

示例

 演示

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int removeDuplicates(vector<int>& nums) {
      int len = 2;
      int n = nums.size();
      if(n <= 2)return n;
      for(int i = 2; i < n; i++){
         if( nums[i] != nums[len - 2] || nums[i] != nums[len - 1]){
            nums[len] = nums[i];
            len++;
         }
      }
      return len;
   }
};
main(){
   Solution ob;
   vector<int> v = {0,0,0,1,1,1,1,2,3,3};
   cout << ob.removeDuplicates(v);
}

輸入

[0,0,0,1,1,1,1,2,3,3]

輸出

7

更新於:2020-05-04

1 千次 + 瀏覽

開啟你的職業

透過完成課程獲得認證

開始
廣告
© . All rights reserved.