https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/

# -*- coding:utf-8 -*-

class Solution(object):
    def removeDuplicates(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        for i in range(len(nums) - 1, 0, -1):
            if nums[i] == nums[i - 1]:
                nums.pop(i)
        return len(nums)
if __name__ == '__main__':
    nums = [1, 1, 2]
    print(Solution().removeDuplicates(nums))

思路:因为要返回nums的引用,所以只能在原变量上进行操作,因此不可以使用set去重,我们循环检查是否与上一位相同,然后pop掉当前元素。

这里使用倒序的原因是如果是正序删掉元素之后会漏查并且会溢出(又因为python的for循环中对i的更改不会实际上改变循环中的i,具体原因我也不是很清楚,查了一大圈,也只是大概知道for循环是一个有着单独线程锁的容器,对i的更改不会造成实际i的改变,如果有知道更详细原因的大佬还希望指教)但是倒序就不一样了,倒序无非是多比较一次,不会造成上溢的问题。

分类: 算法

0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注