leetcode-删除有序数组中的重复元素

题目

解答:

/**

     * 解题思路是使用快慢指针来记录遍历的坐标,

最开始时两个指针都指向第一个数字, 

如果两个指针指的数字相同,则快指针向前走一步,

 如果不同,则两个指针都向前走一步,

 这样当快指针走完整个数组后,

慢指针当前的坐标加1就是数组中不同数字的个数

     * 

     * @param nums

     * @return

     */

    public static int removeDuplicates(int[] nums) {

        //j:慢指针 ,i:快指针

        int len = nums.length;

        int j = 0;

        for (int i = 0; i < len; i++) {

            if (nums[j] != nums[i]) {

                nums[++j] = nums[i];

            }

        }

        /*

        int newlen = j + 1;

        for (int i = 0; i < newlen; i++) {

            System.out.println(nums[i]);

        }

        */

        return j + 1;

    }


    public static int removeDuplication(int[] nums) {

        //pre:慢指针, cur:快指针

        int pre = 0, cur = 0, n = nums.length;

        while (cur < n) {

            if (nums[pre] == nums[cur]) {

                ++cur;

            } else {

                nums[++pre] = nums[cur++];

            }

        }


        /*

        int newlen = pre + 1;

        for (int i = 0; i < newlen; i++) {

            System.out.println(nums[i]);

        }

        */


        return pre + 1;

    }