题目描述
已知一个有序数组,需要删除其中的重复元素,要求不能使用额外的数组,空间复杂度为O(1),要求最后返回无重复元素的数组长度!
解题思路
我们需要怎么删除这个重复的元素并返回数组的长度?
可以使用双指针进行:我们指定一个快指针一个慢指针,快指针从1开始,慢指针从0开始,当两个位置元素不相等的时候两个元素同时向前移动,当两个位置的元素相等的时候快指针向后移动,知道两个位置上的元素不相等的时候,将当前j位置上的元素赋值给i+1位置,这样就可以最后得到我们想要的结果了!
代码展示
public int Double(int nums[]){
if(nums.length==0){
return 0;
}
int i=0; //i从0开始
for(int j=1;j<nums.length;j++) //j从1开始
{
if(nums[i]!=nums[j]) //只有当两个位置上的元素不相等的时候才会往后走!
{
i++;
nums[i]=nums[j];
}
}
return i+1; //因为i从0开始,所以这里最后返回的时候还要加1
}