[刷题班] LeetCode80. 删除有序数组中的重复项II
题目描述
思路:快慢指针
slow指针指向已经处理元素的下一个位置
因为数组有序,如果nums[fast] == nums[slow - 2],那么nums[fast] 肯定等于nums[slow - 1],那么此时这个数就出现了三次。此时slow保持不变,fast继续遍历。
关键:nums[fast] != nums[slow - 2]
方法一:
class Solution {
public int removeDuplicates(int[] nums) {
if (nums.length <= 2) return nums.length;
// 从第三个元素开始
int slow = 2, fast = 2;
for (; fast < nums.length; fast ++) {
if (nums[fast] != nums[slow - 2]) {
nums[slow] = nums[fast];
slow ++;
}
}
return slow;
}
}