题目描述
给定一个有序的数组,设计原地算法移除数组中重复的数字。在原数组的基础上修改后,返回新数组的长度。
额外要求
不得占用额外空间去申请另一个数组,必须使用常数的空间。
样例
输入:
nums = [1, 1, 2]
输出:
length = 2
其中原数组已经修改为[1, 2],在length = 2之后的数字无关紧要。
思路
快慢指针
使用两个指针标记不重复数组和原数组的位置,首先判断数组不为空,为空直接输出0,当数组不空时,从第二个元素开始比较,若这一元素与上一元素都不相同,快慢指针都增加,且把这个不重复的元素加入到不重复集合中,遍历完后,k则是不重复元素的个数
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if(nums.size()==0)//空数组,直接返回
return 0;
int k=1;//慢指针
for(int i=1;i<nums.size();i++){//块指针
if(nums[i]!=nums[i-1]) {//不重复元素
nums[k++]=nums[i]//加进去,慢部分加
}
}
return k;
}
};