59 lines
1.4 KiB
C++
59 lines
1.4 KiB
C++
|
#include<bits/stdc++.h>
|
||
|
using namespace std;
|
||
|
|
||
|
class Solution {
|
||
|
public:
|
||
|
int removeDuplicates(vector<int>& nums) {
|
||
|
const int number_limit = 2*1e4+10;
|
||
|
int numbers[number_limit] = {};
|
||
|
const int shift = 1e4;
|
||
|
for(int i = 0 ; i < nums.size() ; i++){
|
||
|
numbers[nums[i]+shift]++;
|
||
|
}
|
||
|
int sum = 0;
|
||
|
int cur = 0;
|
||
|
for(int i = 0 ; i < number_limit ;i++){
|
||
|
if(numbers[i]>=2){
|
||
|
nums[cur++] = i-shift;
|
||
|
nums[cur++] = i-shift;
|
||
|
sum += 2;
|
||
|
}else if(numbers[i] == 1){
|
||
|
nums[cur++] = i-shift;
|
||
|
sum += 1;
|
||
|
}
|
||
|
}
|
||
|
return sum;
|
||
|
}
|
||
|
int better(vector<int>& nums){
|
||
|
int i = 0 ;
|
||
|
for(int ele: nums){
|
||
|
if( i==0 || i==1 || nums[i-2]!=ele){
|
||
|
nums[i] = ele;
|
||
|
i++;
|
||
|
}
|
||
|
}
|
||
|
return i;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
int main(){
|
||
|
|
||
|
Solution sol;
|
||
|
vector<int> ex1 = {1,1,1,2,2,3};
|
||
|
// int k = sol.removeDuplicates(ex1);
|
||
|
int k = sol.better(ex1);
|
||
|
cout<<k<<endl;
|
||
|
for(int i = 0 ; i < k ; i++){
|
||
|
cout<<ex1[i]<<' ';
|
||
|
}
|
||
|
cout<<endl;
|
||
|
vector<int> ex2 = {0,0,1,1,1,1,2,3,3};
|
||
|
// k = sol.removeDuplicates(ex2);
|
||
|
k = sol.better(ex2);
|
||
|
cout<<k<<endl;
|
||
|
for(int i = 0 ; i < k ; i++){
|
||
|
cout<<ex2[i]<<' ';
|
||
|
}
|
||
|
cout<<endl;
|
||
|
return 0;
|
||
|
}
|