删除排序数组中的重复项
给你一个有序数组 arr ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。
我们可以利用双指针来解决,左指针初始化为0,右指针初始化为1
- 当左指针的值等于右指针时,做指针不变,右指针右移一位
- 当左指针的值不等于右指针时,左指针右移一位,然后在与右指针交换值
如图所示,给定一个排序数组,当我们调用方法后,就会返回删除数组的新长度5:
public class Demo01 {
public static void main(String[] args) {
int[] arr = {1, 1, 2, 3, 4, 4, 4, 5, 5};
System.out.println(removeDuplicates(arr));
}
public static int removeDuplicates(int[] arr) {
int right = 1;
int left;
if (arr == null || arr.length == 0) {
return 0;
}
for (left = 0; right < arr.length; right++) {
if (arr[left] != arr[right]) {
arr[++left] = arr[right];
}
}
return ++left;
}
}