一个有序数组nums,原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。
不能使用额外的数组空间,必须在原地修改输入数组并在使用O(1)额外空间的条件下完成。
例:输入:[0,1,2,2,3,3,4]
输出:4
提升:重点考察双指针算法,一个慢指针一个快指针。
public class SortedArrayDuplicates {
public static void main(String[] args) {
System.out.println(removeDuplicates(new int[]{0,1,2,2,3,3,4}));
}
public static int removeDuplicates(int nums[]){
if (nums.length==0){
return 0;
}
int i=0;
for (int j = 1; j < nums.length; j++) {
if (nums[i]!=nums[j]){
//正常情况下nums[i]!=nums[j]的时候i++,j++
i++;
//这一步很巧妙,当nums[i]和nums[j]贴近的时候因为上一步i++=j了所以不会影响数组值。
//反之如果i跟j已经隔离开时,num[i+1]= nums[j]符合
nums[i]=nums[j];
}
}
return i;
}
}