给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。
不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。
给出数组A =[1,1,2],你的函数应该返回长度2,此时A=[1,2]。
/**
* 这道题跟Remove Element类似,也是考察数组的基本操作,属于面试中比较简单的题目。
* 做法是维护两个指针,一个保留当前有效元素的长度,一个从前往后扫,然后跳过那些重复的元素。
* 因为数组是有序的,所以重复元素一定相邻,不需要额外记录。时间复杂度是O(n),空间复杂度O(1)。
*
* 1123455
*/
public class Solution {
public int removeDuplicates(int[] A) {
if (A == null || A.length == 0) {
return 0;
}
// 一个保留当前有效元素的长度,一个从前往后扫,然后跳过那些重复的元素。
int len = 0;//临时变量,保存
for (int i = 0; i < A.length; i++) {
if (A[i] != A[len]) {
len++;
A[len] = A[i];//数组重新赋值
}
//相等跳过
}
return len + 1;
}
}