题目
不另外开空间,使得一个排好顺序的有重复元素的数组变成一个前k个是排好序的无重复元素的数组,k表示非重复元素的个数。
思路
- 想要不开设空间 。每发现一个重复元素把整个数组向前移动一位。
- 通过一个快指针,一个慢指针。当快指针和慢指针所指的元素不同时,慢指针的值变成当前快指针的值。
重点在于直接赋值。因为对有效个数之外的数组是没有要求的。
#include <cstdio>
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int n = nums.size();
if(n == 0)return 0;
int i = 0;
for(int j = 1; j < n; j ++)
{
if(nums[i] != nums[j])
{
nums[++i] = nums[j];
}
}
return i + 1;
}
};