题目
给定一个有序数组,要求删除数组中的重复元素,不允许创建新数组,返回删除重复元素后的数组长度。
原理
定义一个快指针 j 和一个慢指针 i,慢指针从下标0开始,快指针从下标1开始,遍历数组。如果两个下标对应的数不相等, 则后移 i,并将j的元素赋值到 i,然后后移 j。如果相等,则只后移 j。
这样等 j 遍历完数组后,不重复的元素正好排到 i 的位置。由于题目要求返回长度,所以返回 i+1 即可。
代码
public static void main(String[] args) {
int[] arr = new int[]{0, 1, 2, 2, 3, 3, 4};
int result = duplicateDrop(arr);
System.out.println(result);
}
private static int duplicateDrop(int[] arr) {
if (arr.length <= 1) {
return arr.length;
}
int i = 0;
for (int j = 1; j < arr.length; j++) {
if (arr[j] != arr[i]) {
i++;
arr[i] = arr[j];
}
}
return i + 1;
}
网友评论