/**
* 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,
* 返回删除后数组的新长度。
*
* 不要使用额外的数组空间,你必须在 原地 修改输入数组
* 并在使用 O(1) 额外空间的条件下完成。
*
*/
/**
*
* @param nums 要删除重复元素的数组
* @return 返回处理后的结果
*/
public int removeDuplicates(int[] nums) {
int len = nums.length;
if (len <= 2){
return len;
}
//定义两个指针,fast用于遍历数组nums,slow为处理后的数组下标
int slow = 2, fast = 2;
//从第三个元素开始遍历
while (fast < len){
//因为题目要求最多重复两个元素,因此需要判断当前遍历到元素和前边第2个元素是否相等
if (nums[slow - 2] != nums[fast]){
//如果不相等说明没有重复则改变位置,否则不改变
nums[slow] = nums[fast];
slow++;
}
//开始下一次遍历
fast++;
}
return slow;
}
原文:https://www.cnblogs.com/mx-info/p/14879025.html