问题
给定一个有序数组 nums ,请你 【原地】 删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新长度。
要求:不要使用额外的数组空间,你必须在 【原地】 修改输入数组 并在使用 【O(1)】 额外空间的条件下完成。
思路
通过自定义游标,通过遍历数组的方式,不断比较当前遍历到的数组下标值和游标值-1【两两比较】。如果两个值相等,则数组下标向后移动,游标值不动。如果两个值不相等,则将当前数组下标值覆盖当前游标对应的数组值,并游标向后移动,且记录的数组长度+1。
实现
public class RemoveDuplicates {
public static void main(String[] args) {
//期望结果:5
int[] nums = new int[]{0,0,1,1,1,2,2,3,3,4};
int result = removeDuplicates(nums);
System.out.println(result);
}
//双层指针,两两比较
private static int removeDuplicates(int[] nums) {
int count = 1;
//定义游标
int index = 1;
for (int i=1;i<nums.length;i++){
//比较当前遍历的数组值和游标值-1, 如果相等则数组下标+1
//第一次 数组1,0 游标1,0
//第二次 数组2,1 游标1,0
if (nums[i] == nums[index-1]){
continue;
}
//不等于的话,则将当前数组下标赋值给当前游标值, 游标值+1
nums[index]=nums[i];
index++;
count++;
}
return count;
}
}
网友评论