文章目录
1. 删除有序数组中的重复元素
给定有序数组 nums ,原地删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度, leetcode 原题
- 需注意不需要考虑数组中超出新长度后面的元素
2. 解法
- 思路:
双指针,额外使用计数器统计重复元素出现频率。快指针从前往后遍历,慢指针在 nums[i] != nums[slow] 或者 nums[slow] == nums[i] && count < 2 的时候才向前移动,并将慢指针位置元素更新为快指针指向的元素,从而将出现频率超标的元素替换掉
public int removeDuplicates(int[] nums){
if (0 == nums.length) {
return 0;
}
int slow = 0;
int count = 1;
for (int i = 1; i < nums.length; i++) {
if (nums[slow] != nums[i]) {
slow++;
nums[slow] = nums[i];
// 更新计数器
count = 1;
} else if (nums[slow] == nums[i] && count < 2) {
slow++;
nums[slow] = nums[i];
// 更新计数器
count++;
}
}
return slow + 1;
}