80. 删除有序数组中的重复项 II
解题思路
- 将所有重复元素进行删除 可以通过双指针来实现 定义两个指针
- left right right从左到右将所有元素扫描一遍 将不重复的元素赋值给Left的下一位
- right不断移动 如果nums[right] = nums[left] && nums[right] == nums[left - 1] 说明right指向的是重复元素 right继续移动 如果不相等 说明不是重复元素 保留 left移动一个单位 然后将right的值赋值给left
class Solution {
public int removeDuplicates(int[] nums) {
// 双指针
// 将所有重复元素进行删除 可以通过双指针来实现 定义两个指针
// left right right从左到右将所有元素扫描一遍 将不重复的元素赋值给Left的下一位
// right不断移动 如果nums[right] = nums[left] 说明right指向的是重复元素 right继续移动 如果不相等 说明不是重复元素 保留 left移动一个单位 然后将right的值赋值给left
int slow = 1;// 因为元素可以重复两次 所以直接从第二个元素开始
for(int fast = 2; fast < nums.length; fast+=1){
if(nums[fast] == nums[slow] && nums[fast] == nums[slow - 1]){
// 如果元素相等 跳过 保证元素可以重复两次
continue;
}
nums[++slow] = nums[fast];
}
return slow+1;// 返回数组长度
}
}