删除排序数组中的重复项Python暴力实现

删除排序数组中的重复项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])

顺利通过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值