快慢指针法(双指针法)
- 指针设置:
- fast 指针指针指向需要迭代遍历的数组,从第二个元素开始比较;
- slow 指针指向存放去重后数据;
- 思路:
- 比较数据,如果不相等,slow 指针向前移动,并将 fast 指针指向数据搬移过来;
- 搬移赋值情况:
- 如果没有重复数据时,slow 与 fast 相邻;
- 如果之前出现过重复数据,slow 与 fast 之间形成距离;
- 力扣26. 删除有序数组中的重复项
- 边界条件:
- 因为最多保留2个重复元素,所有从 slow 之前两个元素之后开始存放不同值的元素;
- 从第3个元素开始迭代;
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int size = nums.size();
if (size <= 2) {
return size;
}
int slow = 2;
int fast = 2;
while (fast < size) {
if (nums[slow - 2] != nums[fast]) {
nums[slow] = nums[fast];
slow++;
}
fast++;
}
return slow;
}
};