一、介绍
1.题目描述
题目链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
注意事项:
- 原地删除
- 输出为删除后元素个数
- nums数组为引用方式传入
2.测试样例
[1,1,2] # 2,[1,2]
[0,0,1,1,1,2,2,3,3,4] # 5,[0,1,2,3,4]
二、题解🟢(双指针)
要求:
- 原地删除重复元素
- 记录删除后元素个数 k ,返回 k 。【答案将输出修改后数组的前 k 个数值】
1、令 p=1,q=1。p 为头指针,可记录元素个数,q 为尾指针,遍历完退出循环。
2、当 nums[q]==nums[q-1],说明重复,q++直到不重复元素出现
3、将新元素赋给 p 指向的位置,p++
4、结束循环后 p 代表当前元素个数,返回 p
class Solution {
public:
int removeDuplicates(vector<int>& nums){
int n=nums.size();
if(n==0) return 0;
int p=1,q=1;
while(q<n){
if(nums[q]!=nums[q-1]) nums[p++]=nums[q];
q++;
}
return p;
}
};

该博客介绍了如何解决LeetCode中的‘删除排序数组中的重复元素’问题,采用双指针方法实现原地修改,保证空间复杂度为O(1),并给出了具体的代码实现和测试样例。
407

被折叠的 条评论
为什么被折叠?



