LeetCode #26 删除有序数组中的重复项--20230923

43 阅读1分钟

As the sun begins to retreat,so autumn arrives

题目描述

给你一个 非严格递增排列 的数组 nums ,请你 [原地] 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过: 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。返回 k 。

题解

从下标为1的数据开始遍历数组,如果出现与之前的数据不同的数据(第一次对比的是下标为0和下标为1的数据),计数加1,并不断更新之前数据的值,最后返回计数+1。

代码

public int removeDuplicates(int[] nums) {
    int length = nums.length;
    if (length == 0) {
        return 0;
    } else {
        int i = 0;
        for (int j = 1; j < length; j++) {
            if (nums[i] != nums[j]) {
                i++;
                nums[i] = nums[j];
            }
        }
        return ++i;
    }
}

总结

尽量进行一次遍历,时间复杂度较低。