leetcode(26) 删除有序数组中的重复项

·  阅读 296

方法一:

思路与算法

要删除数组中元素,却不要求改变数据的长度,那么只需要将”不同的元素“前移,由于最后输出结果时,只返回规定长度的数组元素,所以甚至不必”交换“元素,而只是简单地将”不同的元素“复制到”相同的元素“占用的位置即可。

完整代码如下:

class Solution {
    public int removeDuplicates(int[] nums) {
    	// 左指针记录最大不重复元素的下标
        int left = 0;
        // 右指针从头开始遍历数组,每遇到一个不同的元素
        // 就将这个元素的值复制到左指针处,
        // 由于是有序数组,所以只需要使用一个左指针记录当前不重复元素的最大值即可,
        // 同时将左指针右移。
        for (int right = 1; right < len; right++) {
            if (nums[right] != nums[left]) {
                nums[++left] = nums[right];
            }
        }
        return left + 1;
    }
}
复制代码

复杂度分析

时间复杂度:O(n),其中 n 是数组长度,一次遍历即可。 空间复杂度:O(1),只使用了常数级别的额外空间。

总结

虽然只是一道简单题,但还是暗藏玄机,很巧妙地利用的双指针。

分类:
代码人生
标签:
收藏成功!
已添加到「」, 点击更改