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

不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

示例

输入:nums = [1, 1, 2, 2, 3, 3]

输出:2

补充:nums = [1, 2, 3, 2, 3, 3],取值 nums[:2+1]

解析

1)解题的关键还是在审题,注意数组是升序,且要求不能使用额外空间,原地修改

2)双指针问题,慢指针只有在出现新的元素的时候,才往前移动,且把快指针对应的元素赋值给慢指针

代码示例

def removeDuplicates(nums):
    i = 0
    for num in nums:
        if nums[i] != num:
            i += 1
            nums[i] = num
    # print(nums[:i+1])
    return i+1

nums = [1,1,2,3,3]
print(removeDuplicates(nums))

执行用时:32 ms , 在所有 Python3 提交中击败了 98.16% 的用户.

本文为 陈华 原创,欢迎转载,但请注明出处:http://ichenhua.cn/read/351