[用 Python 解 LeetCode] (003) 80. Remove Duplicates from Sorte

题干懒人包

给定一个排列好的列表,将它整理成重複项最多出现两次,比方说以下

[1,1,1,2,2,3] -> [1,1,2,2,3, ...]

最后回传整理完成的数量,比方说上面会回传 5 (1, 1, 2, 2, 3)。

最后以下几点要注意

只能修改该数组,利用的空间複杂度最多为1(意思就是不能创建新的数组append值)

不用管超过回传值以后nums的值

"""比方说输入的 nums = [0,0,1,1,1,1,2,3,3]那最后回传值要等于7,且 nums[:7] 要等于 [0,0,1,1,2,3,3]"""

解法

用 head 纪录当前元素,tmp纪录元素重複几次,接下来迴圈开始比较当前值与下一个值,

如果当前元素不等于遍历到的数值,head += 1 ,并在下标为 head 的地方存放元素,并将tmp设定成0(因为tmp要重置不然之后无法纪录重複有无发生)当元素相同时,优先查看 tmp 是否为0,如果是的话代表该元素上一个没出现过,head += 1 ,并在下标为 head 的地方存放元素,并将 tmp += 1

最后返回 head + 1 (因为head是下标值,非长度)

def removeDuplicates(self, nums) -> int:        head = 0        tmp = 0        for i in range(1, len(nums)):            if nums[i] != nums[head]:                head += 1                tmp = 0                nums[head] = nums[i]            else:                if tmp == 0:                    head += 1                    tmp += 1                    nums[head] = nums[i]        return head + 1

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章