删除排序数组中的重复项Python暴力实现
在Leetcode上看到了,若使用纯暴力解法,提交时最后一个样例由于数组过大超时没有通过,如下所示:
此处贴代码,很简单,很暴力
#样例
nums=[0,0,1,1,1,2,2,3,3,4]
length=len(nums)
i=0
if length==0: //判断数组是否为空
print("NULL")
elif length==1: //若数组只有一个数,不需要删除,直接输出就行
print(nums[0])
else:
while i < length - 1: //暴力循环,遇到重复的就把后边的全部往前挪一个位置
if nums[i] == nums[i + 1]:
for j in range(i + 1, length - 1):
nums[j] = nums[j + 1]
length = length - 1
else:
i = i + 1
for i in range(length):
print(nums[i])
当然,这样暴力循环时间复杂度是o(n^2),当然是过不了的。
接下里使用时间复杂度更低的算法,从最后一个开始遍历,如果重复就把后边的往前挪。
#样例
nums=[0,0,1,1,1,2,2,3,3,4]
nums.sort()
last = nums[-1] //last初始值为数组最后一个值
for i in range(len(nums) - 2, -1, -1): //对次例而言,len(nums)=10,此处i从8开始往前寻找,一直到0,即i=8,7,6,5,4,3,2,1,0
if last == nums[i]:
del nums[i] // 删除位置i处的元素后,其后一个相同的元素又补到了i位置
else:
last = nums[i]
for i in range(len(nums)):
print(nums[i])
顺利通过