这是26. Remove Duplicates from Sorted Array 的升级版,仅仅做了一点改动:允许两个相邻的元素相同,超过两个则不允许。我所做的就是在原来的基础上添加一个变量用来记录连续的个数,如果一直相同则这个变量一直累加下去,如果出现不同,那么这个变量置 1。判断指针是否同时后移的条件则是如果不等或者 相同的个数小于 2。
第一份代码:
class Solution {
public:
int removeDuplicates(vector<int> &nums) {
if (nums.size() <= 2) return nums.size();
int index = 0, dups = 1;
for (int i = 1, n = nums.size(); i < n; ++i) {
if ((nums[index] != nums[i]) || dups < 2) {
if (nums[index] == nums[i])
dups++;
else
dups = 1;
nums[++index] = nums[i];
}
}
nums.resize(++index);
return nums.size();
}
};
代码拾遗:使用 vector 的 resize 方法用以改变 vector 的大小。
第二份代码:
这个没有使用变量记录重复的次数
class Solution {
public:
int removeDuplicates(vector<int> &nums) {
if (nums.size() <= 2) return nums.size();
int index = 2;
for (int i = 2; i < n; ++i) {
if (nums[i] != nums[index - 2])
nums[index++] = nums[i];
}
return index;
}
};
第三份代码:
在不合适的时候选择 continue,与前面的思想相同
class Solution {
public:
int removeDuplicates(vector<int> &nums) {
int index = 0;
for (int i = 0, n = nums.size(); 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;
}
};