LeetCode 26: Remove Duplicates from Sorted Array

来源:互联网 发布:php reflection的作用 编辑:程序博客网 时间:2024/06/05 07:44

原题链接在此:https://leetcode.com/problems/remove-duplicates-from-sorted-array/

这是一道比较简单的题目。要想去除排序数组中的重复数字,容易想到的方案是用一个临时变量lastNum记录上一个数字,再和当前遍历到的数字比较。需要注意的是,题目要求把去重后的数字序列放到数组最前端,比较容易想到的做法是:类似快速排序的算法,用一个变量j来遍历整个数组,用另一个变量i记录当前去重数字序列的最右端;当i和j指向的数字不等时,交换两个数字。

     public int removeDuplicates(int[] nums) {        int sum = 0;        Integer lastNum = null;        int i = -1;        for (int j = 0 ; j <= nums.length - 1; j++) {            if (lastNum == null || lastNum != nums[j]) {                i++;                sum++;                lastNum = nums[j];                swap(nums, i, j);            }        }        return sum;    }    public void swap(int[] nums, int i, int j) {        if (i != j) {            int temp = nums[i];            nums[i] = nums[j];            nums[j] = temp;        }    }

后面参考了别人的解法,可以对上述算法做一些优化:一是其实不需要交换,只需要覆盖就行;二是可以省去一些非必需的临时变量。新的算法更加简洁。

     public int removeDuplicates(int[] nums) {        if (nums.length == 0)            return 0;        int i = 0;        for (int j = 1 ; j <= nums.length - 1; j++) {            if (nums[j - 1] != nums[j]) {                i++;                nums[i] = nums[j];            }        }        return i + 1;    }
原创粉丝点击