删除排序数组中的重复项——双指针算法
一个有序数组nums,原地删除重复出现的元素,使每一个元素只出现一次,返回删除后数组的新长度。
不能使用额外的数组空间,必须在原地修改输入数组并在使用O(1)额外空间的条件下完成
例如:输入:[0,1,1,2,2,2,3,3,4]
输出:5
思路:
1、因为只输出长度,所以我们可以定义两个双指针,一个快指针,一个慢指针
2、快指针在往前走,如果当快指针的值和慢指针的值不相同时,慢指针向前进一,快指针也向前进一。如果当快指针的值和慢指针的值相同时,则慢指针不动,快指针进一
例如:
public class SortedArrayRemoveDumplicates {public static void main(String[] args) {System.out.println(removeDuplicates(new int[]{0,1,1,2,2,2,3,3,4}));}private static int removeDuplicates(int[] array) {if (null == array) {return 0;}if (0 == array.length || 1 == array.length) {return array.length;}int i = 0;for (int j = 1; j < array.length; j++) {if (array[i] != array[j]) {array[++i] = array[j];}}return i+1;}}
