1. 题意
删除有序数组中的重复元素,同一元素不能超过两次。
2. 题解
leetcode26. 删除有序数组中的重复项的升级版本,只需要考虑 n u m s [ l e n − 2 ] ≠ n u m s [ j ] nums[len -2] \ne nums[j] nums[len−2]=nums[j]即可, l e n len len是排列好的有序数组长度, j j j遍历完整个数组。
- 通解 k = 2 k=2 k=2
cpp
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int sz = nums.size();
int j = 0;
for (int num: nums) {
if ( j < 2 || nums[j - 2] != num){
nums[j] = num;
j++;
}
}
return j;
}
};
- 模拟
cpp
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int sz = nums.size();
int i = 0;
int j = 1;
int len = 0;
if (sz <= 2)
return sz;
for (int j = 1;j < sz; j++) {
if (nums[i] != nums[j]) {
nums[len++] = nums[i];
if (j == sz - 1) {
nums[len++] = nums[j];
}
i++;
}
else {
nums[len] = nums[i];
nums[len + 1] =nums[i];
len += 2;
j++;
while (j < sz && nums[j] == nums[i])
j++;
if (j + 1 < sz) {
i = j;
}
else if (j < sz) {
nums[len++] = nums[j];
}
}
}
return len;
}
};