题目描述
已知一个有序数组,需要删除其中的重复元素,要求不能使用额外的数组,空间复杂度为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
}

本文介绍了一种在不使用额外数组且空间复杂度为O(1)的情况下删除有序数组中重复元素的方法。通过使用双指针技巧,一个快指针和一个慢指针遍历数组,实现原地删除重复项,并返回新数组的有效长度。
279

被折叠的 条评论
为什么被折叠?



