版权声明: https://blog.csdn.net/zl6481033/article/details/88355239
1、题目描述
2、分析
去除数组中的重复元素,不能使用别的数组,返回数组不同的元素个数n,并且在原数组上修改数组使数组前n个元素就是不重复的元素。
题目要求不能开新的数组,也就是在原数组上进行更改。大致的思路是使用快慢指针,一开始两个指针指向同一个元素,如果两个指针所指的值相同,那么快指针向前走一步,再比较。如果不相等,那么就要将慢指针先向前走一步,然后将新的慢指针指向的元素变成快指针此时的值,之后再将快指针向前走一步。这样在快指针遍历完整个数组的时候,不同的元素个数就是慢指针加1。并且数组前面的值也已经改过了。
3、代码
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if (nums.empty()) return 0;
int pre = 0, cur = 0, n = nums.size();
while (cur < n) {
if (nums[pre] != nums[cur]){
pre++;
nums[pre]=nums[cur];
cur++;
}
else
cur++;
}
return pre + 1;
}
};
4、涉及知识点
数组中双指针的用法很灵活,有时可以是一左一右向中间走这种可以叫做左右指针,也可以同时从一边走根据情况两个指针向前迭代。