美文网首页
letcode[026] 删除排序数组中的重复项

letcode[026] 删除排序数组中的重复项

作者: 一起学分析 | 来源:发表于2018-12-27 11:05 被阅读6次
题目026

题目地址:删除排序数组中的重复项

  1. 很多概念没有数据结构的知识似乎就很难理解,比如python中的链表;本题中网站要求的结果形式。
  2. 按顺序刷题不太可行了,得跳题了

思路1:自拟思路: 难道不是set直接解决?

总结: 好吧,真的不行,不知道为啥。
用时: ?? ms

nums = [0,0,1,1,1,2,2,3,3,4]
def removeDuplicates1(nums):
    return list(set(nums))

思路2:自拟思路——依次判断前后是否相等,对后者进行删除

不行就依次判断前一个是否和后一个相等,相等则删除后一个。
总结: 为啥还是不行? return为nums时不行,需要return为len(nums)?是几个意思?
用时: 120 ms

nums = [0,0,1,1,1,2,2,3,3,4]
def removeDuplicates2(nums):
    length=len(set(nums))
    i=1
    while len(nums)>length:
        if nums[i-1]==nums[i]:
            del nums[i]
        else:
            i+=1
    return len(nums)

思路3:自拟思路——对数据进行依次比较,遇到不同的数据,则将数据赋值到前面位数

判断如果上一位和下一位不同,则依次将不同的数字按顺序放到nums中。
总结:同上面。把return改成index也可以,就变成了letcode最快的思路了。
用时:96 ms

nums = [0,0,1,1,1,2,2,3,3,4]
def removeDuplicates3(nums):
    length=len(set(nums))
    length_f=len(nums)
    index=1
    for i in range(1,length_f):
        if nums[i-1]!=nums[i]:
            nums[index]=nums[i]
            index+=1
    return len(nums[:length])

思路4:网友思路——思路3的进阶

思路和上面相同,但是借助了键值对的形式。
总结: 还是用字典快??
用时:68 ms

nums = [0,0,1,1,1,2,2,3,3,4]
def removeDuplicates4(nums):
    if not len(nums):
        return len(nums)
    tmp = nums[0]
    index = 0
    for i, v in enumerate(nums):
        if tmp == v:
            continue
        else:
            nums[index] = tmp
            tmp = v
            index += 1
    nums[index] = tmp
    return len(nums[:index+1])

相关文章

网友评论

      本文标题:letcode[026] 删除排序数组中的重复项

      本文链接:https://www.haomeiwen.com/subject/mwfzkqtx.html