LeetCode Remove Duplicates from Sorted Array

来源:互联网 发布:linux 返回上级目录 编辑:程序博客网 时间:2024/05/19 04:56

问题网址:https://leetcode.com/problems/remove-duplicates-from-sorted-array/description/

问题描述:
给定一个有序数组,删除重复内容,使每个元素只出现一次,并返回新的长度。

不要为其他数组分配额外的空间,您必须通过在O(1)额外的内存中就地修改输入数组来实现这一点。

问题例子:

Given nums = [1,1,2],Your function should return length = 2, with the first two elements of nums being 1 and 2 respectively.It doesn't matter what you leave beyond the new length.

这个问题没什么难度
两指针方法

由于数组已经排序,我们可以保留两个指针i和j,其中i是慢跑者,而j是快跑者。 只要nums [i] = nums [j] ,我们增加j跳过重复。

当我们遇到nums [j]≠nums [i]时,重复运行已经结束,因此我们必须将其值复制到nums [i + 1] 。 i然后递增,我们再次重复相同的过程,直到j到达数组的末尾。

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

复杂性分析
时间复杂度:O(n)。 假设n是数组的长度。 i和j中的每一个最多跨越n个步骤。
空间复杂度:O(1)。