返回

LeetCode 287. Find the Duplicate Number:用 Python 发现重复数字的艺术

后端

前言

算法题可以帮助你提升编程技巧,让你成为一名更好的程序员。其中,LeetCode 是一个备受欢迎的在线算法题库,汇集了大量编程问题,供你学习和练习。本文将带你领略 LeetCode 287. Find the Duplicate Number 的奥秘,用 Python 代码找出数组中重复出现的数字。

问题

给你一个包含 n 个整数的数组 nums,其中某些数字可能重复出现。请你找出数组中重复出现的数字。

方法一:集合

集合是一种数据结构,它可以存储不重复的元素。我们可以使用集合来解决这个问题。首先,我们创建一个集合来存储数组中的元素。然后,我们遍历数组,并逐个将元素添加到集合中。如果某个元素已经存在于集合中,那么它就是重复元素。

def findDuplicate(nums):
    seen = set()
    for num in nums:
        if num in seen:
            return num
        seen.add(num)

方法二:技巧

我们可以利用数组的性质来解决这个问题。由于数组中的数字范围为 [1, n],我们可以将数组视为一个哈希表,其中每个数字对应一个哈希槽。当我们遍历数组时,我们将每个数字放入对应的哈希槽中。如果某个数字已经存在于哈希槽中,那么它就是重复元素。

def findDuplicate(nums):
    for num in nums:
        if nums[abs(num) - 1] < 0:
            return abs(num)
        nums[abs(num) - 1] *= -1

方法三:排序

我们可以对数组进行排序。排序后,重复元素将相邻排列。因此,我们可以遍历排序后的数组,并逐个比较相邻的元素。如果某个元素与前一个元素相等,那么它就是重复元素。

def findDuplicate(nums):
    nums.sort()
    for i in range(1, len(nums)):
        if nums[i] == nums[i - 1]:
            return nums[i]

结语

以上就是三种解法,你可以根据自己的喜好选择一种来解决问题。LeetCode 题库中还有更多精彩的问题,欢迎你继续探索和学习。

更多精彩

致谢

感谢 LeetCode 为我们提供了如此有趣的编程题。也感谢广大网友对本文的关注和支持。希望本文能对你的学习有所帮助。