题目描述:
题目中已经给出该数组是一个升序的数组。要求数组中最多出现两个相同的元素,而且不能使用额外的存储空间,并且将新的数组的长度返回。
解题思想:
该题可以使用双指针来解决,我们可以定义一个快指针和一个慢指针。因为数组中最多只能出现两个相同的元素,所以我们可以将快慢指针的索引都设为2(第三个元素),之后,快指针和(慢指针-2)的值进行比对,如果值相等,则快指针前进一位,如果不相等,则证明出现了新的元素,此时就将快指针的值赋值给慢指针,之后慢指针再前进一位,快指针也前进一位。
代码实现:
class Solution {
public int removeDuplicates(int[] nums) {
//如果长度不超过2,则无需处理
int n=nums.length;
if(n<=2) return n;
//设置双指针
int slow=2;//慢指针
int fast=2;//定义fast快指针,用来扫描数组
while(fast<n)
{
if(nums[fast]!=nums[slow-2])
{
nums[slow]=nums[fast];//如果不一致,将将快指针的值传递给慢指针
//之后慢指针向前移动一位
slow++;
}
fast++;
}
return slow;
}
}