Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ลบรายการที่ซ้ำกันออกจาก Sorted Array II ใน C ++


สมมติว่าเรามีหมายเลขอาร์เรย์ที่เรียงลำดับแล้ว เราต้องลบรายการที่ซ้ำกันออกเพื่อให้องค์ประกอบที่ซ้ำกันปรากฏอย่างมากที่สุดสองครั้งและส่งคืนความยาวใหม่ ในการทำงานนี้เราไม่สามารถใช้พื้นที่พิเศษได้ เราต้องแก้ปัญหานี้ด้วยพื้นที่ 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
  • คืนเลน

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

#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