/*
Description:
Follow up
for ”Remove Duplicates”: What
if duplicates are allowed at most twice?
For example, Given sorted
array A = [
1,
1,
1,
2,
2,
3],
Your
function should return length =
5,
and A
is now [
1,
1,
2,
2,
3]
*/
方法一
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
int removeDuplicates(
vector<int>& nums) {
if (nums.size() <=
2){
return nums.size();
}
int index =
2;
for (
int i =
2; i < nums.size(); i++){
if (nums[i] != nums[index -
2]){
nums[index++] = nums[i];
}
}
return index;
}
};
int main(){
Solution a;
vector<int> nums;
nums.push_back(
1);
nums.push_back(
1);
nums.push_back(
2);
nums.push_back(
2);
nums.push_back(
2);
nums.push_back(
3);
nums.push_back(
3);
nums.push_back(
4);
int b=a.removeDuplicates(nums);
cout<<b;
return 0;
}
方法二
#include<iostream>
#include<vector>
#include <algorithm>
using namespace std;
class Solution {
public:
int removeDuplicates(
vector<int>& nums) {
const int n = nums.size();
int index =
0;
for (
int i =
0; i < n; ++i) {
if (i >
0 && i < n -
1 && nums[i] == nums[i -
1] && nums[i] == nums[i +
1]){
continue;
}
nums[index++] = nums[i];
}
return index;
}
};
int main(){
Solution a;
vector<int> nums;
nums.push_back(
1);
nums.push_back(
1);
nums.push_back(
2);
nums.push_back(
2);
nums.push_back(
2);
nums.push_back(
3);
nums.push_back(
3);
nums.push_back(
4);
int b=a.removeDuplicates(nums);
cout<<b;
return 0;
}
总结
方法二是一个较简洁的版本;方法一的扩展性更好,例如将occur < 2改为occur < 3,就变成了允许重复最多3次。