[剑指offer]3.数组中的重复数字

3.数组中的重复数字

题目

找出数组中重复的数字。

在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

方法一

排序

现将序列排序,并找出与之后面相邻元素相等的元素。

时间复杂度O(nlogn)

代码

class Solution:
    def findRepeatNumber(self, nums: List[int]) -> int:
        nums.sort()
        for i in range(len(nums)):
            if nums[i] == nums[i+1]:
                return nums[i]

方法二

哈希表

创建空字典dic,将没有遍历过的值存在字典dic中,若遍历到字典中存在的值,则直接返回该元素。

时间复杂度O(n)

代码

class Solution:
    def findRepeatNumber(self, nums) :
        dic = {}
        for num in nums:
            if num not in dic:
                dic[num] = 1
            else:
                return num
            
if __name__=='__main__':
    a = input()
    nums = [int(num) for num in a.strip().split(' ')]
    num = Solution().findRepeatNumber(nums)
    print(num)
原文地址:https://www.cnblogs.com/wyz-2020/p/12507875.html