Follow up for “Remove Duplicates”:
What if duplicates are allowed at most twice?
For example,
Given sorted array nums = [1,1,1,2,2,3],
Your function should return length = 5, with the first five elements of nums being 1, 1, 2, 2 and 3. It doesn’t matter what you leave beyond the new length.
在题号26. Remove Duplicates from Sorted Array的基础上做修改
与之不同的是,设置了一个统计元素出现次数的变量count。
count初始设置为1,count等于2的时候说明该元素第二次出现,安照题目要求需要把这个元素留下,保存到k位置,然后k++。如果下一个元素仍然是重复的,抛弃,k不变。
时刻记住我们的定义:区间[0…k)内存放的元素的重复次数不能超过两次,第三次重复出现的元素不能放进这个区间内。
在循环的过程,不断的去维护我们的定义。
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if (nums.size() < 1) return 0;
int count = 1, k = 1;
for (int i = 1; i < nums.size(); i++) {
if (nums[i] != nums[i - 1]) {
count = 1;
if (k != i)
nums[k++] = nums[i];
else
k++;
}
else {
count++;
if (count == 2) {
nums[k++] = nums[i];
}
}
}
return k;
}
};
继续优化:
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if (nums.size() < 1) return 0;
int count = 1, k = 1;
for (int i = 1; i < nums.size(); i++) {
if (nums[i] == nums[i - 1]) {
count++;
if (count > 2)
continue;
}
else {
count = 1;
}
nums[k++] = nums[i];
}
return k;
}
};