题目
一个有序数组nums,原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。不能使用额外的数组空间,必须在原地修改输入数组并在使用O(1)额外空间的条件下完成。
例如:
输入:[0,1,2,2,3,3,4]
输出:5
一、思路
双指针算法,具体步骤如下:
1)首先初始化两个指针i、j;
2)0和1不相等,两个指针后移,直到找到相等的两个连续数字;
3)j指针后移,找到与 i 指针所指数字不同的数字3,然后将 i 指针后移,并且将 j 所指数字赋值给 i;
4)j指针后移,重复步骤2、3,直到数组中不存在两个相邻的连续数字。
二、代码
代码如下(示例):
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[j] != nums[i]){
i++;
nums[i] = nums[j];
}
}
return i + 1;
}