【每日一题】【LeetCode】【第九天】【Python】存在重复元素

解决之路= =

题目描述

在这里插入图片描述

测试案例(部分)

在这里插入图片描述

第一次

关键就是看是否有重复元素,暴力解法就是双循环,然后有相同元素就返回True,否则就等循环结束,返回False

但是自己想到了另一个只需要一个循环的解法。用一个循环来确定一个元素,然后通过切片,在后面的元素中查找是否存在这个元素。如果存在,那就是重复了,返回True;反之,就循环结束,返回False

class Solution(object):
    def containsDuplicate(self, nums):
        for k, v in enumerate(nums):
            if v in nums[k + 1:]:
                return True
        return False

测试正确,提交,通过了,不过。。。怎么耗时这么长?

在这里插入图片描述

第二次

难道还是用nb的双指针?试了试,感觉是不行的。如果left和right两头按比大小的规则左右移动,就可能会导致漏相同的元素。

感觉还是要延续第一次代码的思路,第一次是用元素往后面的所有元素中找是否相同,这样比较费时间。在试双指针的时候,自己想到了到底是排序过后再用还是不用排序直接用,那么,结合第一次的思路,我先将输入序列排序,然后每次循环选中的元素,和下一位元素进行对比,如果相同就返回True,如果整个循环结束,都没有相同,就返回False。这样,就不用in来判断子列表中是否有元素相同了。

class Solution(object):
    def containsDuplicate(self, nums):
        nums.sort()
        for i in range(len(nums) - 1):
            if nums[i] == nums[i + 1]:
                return True
        return False

测试正确,提交,通过了,时间确实降下来了。

在这里插入图片描述

第三次

感觉画的时间可能还能降,翻一翻万能的评论区。

哎哟,我傻了,看到了一个C++老哥用集合set来解决。对啊,用集合的去重思路来解决确实是一种思路。不多说了,立马实现一下试试。

class Solution(object):
    def containsDuplicate(self, nums):
        nums_set = set(nums)
        if len(nums_set) != len(nums):
            return True
        else:
            return False

测试正确,提交,通过了,真的时间更短。

在这里插入图片描述

闲话

后续又看到一个老哥,把我写的这个逻辑简化成了一行代码。

在这里插入图片描述
牛,但是提交测试了一下,画的时间和自己第三次的代码一样。

还看到一只“派蒙”写了和我第二次一样的代码逻辑,虽然是用java写的,但这个if(nums[i]==nums[i+1])一看就和我不谋而合,哈哈哈哈,有缘呀。

在这里插入图片描述

附件

昨天本来剩一半单词打算床上背的,结果洗漱完就忘了。。。
今天补上

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值