删除排序数组中的重复项——双指针算法

    一个有序数组nums,原地删除重复出现的元素,使每一个元素只出现一次,返回删除后数组的新长度。

    不能使用额外的数组空间,必须在原地修改输入数组并在使用O(1)额外空间的条件下完成
    例如:输入:[0,1,1,2,2,2,3,3,4]
    输出:5
    思路:
    1、因为只输出长度,所以我们可以定义两个双指针,一个快指针,一个慢指针
    2、快指针在往前走,如果当快指针的值和慢指针的值不相同时,慢指针向前进一,快指针也向前进一。如果当快指针的值和慢指针的值相同时,则慢指针不动,快指针进一
    例如:
    image.png

    1. public class SortedArrayRemoveDumplicates {
    2. public static void main(String[] args) {
    3. System.out.println(removeDuplicates(new int[]{0,1,1,2,2,2,3,3,4}));
    4. }
    5. private static int removeDuplicates(int[] array) {
    6. if (null == array) {
    7. return 0;
    8. }
    9. if (0 == array.length || 1 == array.length) {
    10. return array.length;
    11. }
    12. int i = 0;
    13. for (int j = 1; j < array.length; j++) {
    14. if (array[i] != array[j]) {
    15. array[++i] = array[j];
    16. }
    17. }
    18. return i+1;
    19. }
    20. }