删除有序数组中的重复项

题目:

给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。

考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:

  • 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。

  • 返回 k

Code

int removeDuplicates(int* nums, int numsSize) {
    if(numsSize<=0)
        return 0;
    int leftIndex   = 0,rightIndex  = 1;
    for(;rightIndex<numsSize;rightIndex++)
    {
        if(nums[leftIndex] != nums[rightIndex])
        {
            nums[++leftIndex] = nums[rightIndex];
        }
    }
    return leftIndex+1;
}

 

 

思路

替换,将不重复的值移到左边

解题方法

两个index,一个leftIndex指向当前左边最大的数,另外一个rightIndex指向该值后面中不重复的值,然后leftIndex往后的一个位置的值。

复杂度

  • 时间复杂度:

$O(n)$

  • 空间复杂度:

$O(1)$