删除排序数组中的重复项

问题陈述

给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

思路分析

定义两个指针p,q。p=0,q=1,若nums[q]!=nums[p],则将nums[q]赋给nums[p+1]。如此,实现了一次遍历,原地删除。原地理解为只操作nums。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution{
public int removeDuplicate(int[] nums){
if(nums==null||nums.length==0) return 0;
int p=0,q=1;
while(q<nums.length){
if(nums[p]!=nums[q]){
nums[p+1]=nums[q];
p++;
}
q++;
}
return p+1;
}
}