这两种算法的区别

时间:2018-05-28 10:25:05

标签: python-3.x algorithm

问题是返回数组中删除的重复数字。 link

这是解决方案。

    dict1={}
    arr=[]
    for i in nums:
        if i not in dict1:
            dict1[i]=1
            arr.append(i)
    nums[:]=arr
    return len(nums)

这是我的方法......为什么不起作用?

    hash = {}
    for num in nums:
        if num in hash:
            nums.remove(num)
        hash[num] = num
    return len(nums)

我一直在研究这个问题超过30分钟:(

1 个答案:

答案 0 :(得分:3)

从算法的角度来看,第二个看起来并不好,因为remove具有比散列插入和删除更高的时间复杂度。因此,删除时间超过O(1)。第一个实现使用附加列表。此外,您还可以执行list (hash.keys ())并返回它,而不是维护另一个数组。

对于平均和摊销的案例(检查https://wiki.python.org/moin/TimeComplexity?),Python列表删除O(n),但dict操作的平均情况为O(1)O(n)摊销时间为set。在这种情况下,我在dict中标记元素,然后返回键是一个更好的主意。

虽然,在这种情况下,我认为使用一组WebElement email= driver.findElement(By.name("Email")); email.clear(); email.sendKeys(""); 标记唯一的项目可能是一个更好的主意,因为它不仅会更快,而且会更轻松。

从代码的角度来看,除非您使用索引访问和修改列表并自行处理列表修改和索引操作,否则不要修改您正在迭代的列表。