删除排序数组中的重复项 II
题目
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
样例
- 给定 nums = [1,1,1,2,2,3],
函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。 - 给定 nums = [0,0,1,1,1,1,2,3,3],
函数应返回新长度 length = 7, 并且原数组的前五个元素被修改为 0, 0, 1, 1, 2, 3, 3 。
Code1
分析
初始index=0,i=2,for循环遍历;
比较[index]和[i],若不相等,则将[i]赋值给[index++],并向后遍历;若相等,直接向后遍历,跳过中间重复项。
时间复杂度O(n);空间复杂度O(1)
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;
}
Code2
分析
时间复杂度O(n);空间复杂度O(1)
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;
}
若有疑问可评论交流=_=!