删除数组中的重复元素
给定有序数组,要求在不使用额外空间的前提下删除其中的重复元素
public static void main(String[] args) {
int[] arr = {1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 5, 5};
int count = removeDuplicates2(arr);
int[] ints = Arrays.copyOf(arr, arr.length - count);
System.out.println(arr.length - count+","+Arrays.toString(ints));
}
private static int removeDuplicates(int[] arr) {
if (arr == null && arr.length == 0)
return 0;
int left = 0;
int count = 0;
for (int right = 0; right < arr.length; right++) {
if (arr[left] == arr[right]) {
//如果左指针和右指针指向的值一样,说明有重复的,这时左指针不动右指针向右移动
count++;
} else {
//如果不相等,左指针向右移动,并把右指针的值赋给左指针
arr[++left] = arr[right];
}
}
return count;
}
方法2
private static int removeDuplicates2(int[] arr) {
if (arr == null && arr.length == 0)
return 0;
int count = 0;
for (int right = 1; right < arr.length; right++) {
if (arr[right] == arr[right-1]) {
//如果左、右指针指向的两数相等,count++
count++;
} else {
arr[right-count] = arr[right];
}
}
return count;
}