删除有序数组中的重复项 II
问题:
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
思路:
参考 数组去重 思路
- 如果数组长度小于 3,无需操作。因为每个元素都可出现两次。
- 假定两个指针,slow 指针用于为新数组下标赋值。fast 指针用于查找下下个不相同的元素。
- 返回新数组长度。
class Solution {
public:
int removeDuplicates(vector<int>& nums) const {
auto const n = nums.size();
if(n < 3) return n;
auto slow = 2;
auto fast = 2;
while(fast < n) {
if(nums[slow - 2] != nums[fast]) {
nums[slow++] = nums[fast]; // 赋值后下标加一。
}
fast++;
}
return slow;
}
};