这种“包含重复项”的解决方案能否更通俗地实现?

2024-09-26 22:51:50 发布

您现在位置:Python中文网/ 问答频道 /正文

这是LeetCode问题“包含重复项”的解决方案。我尝试使用enumerate(nums[1:])而不是range(1, len(nums)),但由于枚举总是从0开始,因此我不知道如何以简洁明了的方式执行类似的操作

class Solution:
    def containsDuplicate(self, nums: List[int]) -> bool:
        nums.sort()
        
        pointer2 = 0
                
        for pointer1 in range(1, len(nums)):
            if nums[pointer1] == nums[pointer2]:
                return True
            pointer2 = pointer1
            
        return False

Tags: selflenreturndef方式range解决方案class
3条回答

使用集合。我们知道一个集合不能有重复的值,所以当我们将整数列表强制转换为一个集合时,它会删除重复的值。然后我们要做的就是比较这两种长度。试试这个:

return len(set(nums)) == len(nums)

可以这样写

    def containsDuplicate(self, nums: List[int]) -> bool:
        nums.sort()
        
        pointer2 = 0
            
        for pointer1, num in enumerate(nums[1:], start=1):
            if num == nums[pointer2]:
                return True
            pointer2 = pointer1
        return False

这是一个简单的一行解决方案,我建议您先浏览Python中的所有数据结构,然后尝试在那里提问

您应该使用set而不是两个指针:

class Solution(object):
    def containsDuplicate(self, nums):
        return len(nums) != len(set(nums))

另一种方法是使用Hashmaps:

    hashNum = {}
    for i in nums:
         if i not in hashNum:
             hashNum[i] = 1
         else:
             return True
    return False

相关问题 更多 >

    热门问题