Giả sử chúng ta có một số mảng đã được sắp xếp, chúng ta phải loại bỏ các phần tử trùng lặp tại chỗ sao cho các phần tử trùng lặp sẽ xuất hiện nhiều nhất hai lần và trả về độ dài mới. Để thực hiện tác vụ này, chúng ta không thể tốn thêm dung lượng. Chúng ta phải giải quyết vấn đề này với lượng không gian là O (1). Ví dụ:nếu mảng giống như [0,0,0,1,1,1,1,2,3,3], thì đầu ra sẽ là [0,0,1,1,2,3,3] , chiều dài của nó là 7
Hãy để chúng tôi xem các bước -
- len:=2 và n:=kích thước của mảng
- nếu n <=2, thì trả về n
- for i:=2 to n
- nếu nums [i]! =nums [len - 2] hoặc nums [i]! =nums [len - 1]
- nums [len]:=nums [i] và tăng len thêm 1
- nếu nums [i]! =nums [len - 2] hoặc nums [i]! =nums [len - 1]
- return len
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
#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); }
Đầu vào
[0,0,0,1,1,1,1,2,3,3]
Đầu ra
7