
题目地址:删除排序数组中的重复项
- 很多概念没有数据结构的知识似乎就很难理解,比如python中的链表;本题中网站要求的结果形式。
- 按顺序刷题不太可行了,得跳题了
思路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])
网友评论