[用 Python 解 LeetCode] (002) 26. Remove Duplicates from Sorte

题干懒人包

基本上跟27题很像,输入是一个已经排序好的数组,最后输出非重複数值的数量,然后以下几点要注意:

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

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

"""比方说输入的 nums = [0,0,1,1,1,2,2,3,3,4]那最后回传值要等于五,且 nums[:5] 要包含 0, 1, 2, 3, 4 这几个数字,然后数字在该切片里的顺序不重要"""

while 解法

head 纪录当前非重複的下标 (有点像 selection sort),i 迴圈遍历到的当前元素,如果跟当前不一样非重複下标 head 加一,然后新的下标得值跟不一样的值进行交换。1

class Solution:    def removeDuplicates(self, nums) -> int:        head = 0        i = 1        while i < len(nums):            if nums[head] != nums[i]:                head += 1                nums[head], nums[i] = nums[i], nums[head]            i += 1        return head + 1

for 解法

跟 while 原理一样只是改写 (这里用for 会好一点,因为不管怎么样都要循环整个数组)

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

别人的写法

意义跟上面一样,只是从纪录非重複的,变成纪录重複的数量

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

关于作者: 网站小编

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

热门文章