返回
LeetCode 287. Find the Duplicate Number:用 Python 发现重复数字的艺术
后端
2023-11-08 17:04:17
前言
算法题可以帮助你提升编程技巧,让你成为一名更好的程序员。其中,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 1. Two Sum:Python 代码轻松求两数之和
- LeetCode 2. Add Two Numbers:用 Python 代码相加两个链表
- LeetCode 3. Longest Substring Without Repeating Characters:寻找不重复字符的最长子串
致谢
感谢 LeetCode 为我们提供了如此有趣的编程题。也感谢广大网友对本文的关注和支持。希望本文能对你的学习有所帮助。