天天刷leetcode——剑值offer03.数组中的重复数字


剑值offer03.数组中的重复数字。 1

题目描述

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

思路

1. 遍历列表,用字典进行统计

Code :

    def findRepeatNumber(self, nums: List[int]) -> int:
        dic ={}
        res = []
        for i in range(len(nums)):
            if nums[i] in dic:
               res.append(nums[i])
               break
            else:
                dic[nums[i]] = 1
        return res[0]

时间复杂度:O(n); 空间复杂度:O(n)
在这里插入图片描述
总结:

2. 排序,然后遍历,计算相邻两个数据是否想等即可。

code:

    def findRepeatNumber(self, nums: List[int]) -> int:
        # 冒泡排序
        # nums.sort()
        def pubble(nums):
            for i in range(len(nums)-1):
                for j in range(len(nums)-i-1):
                    if nums[j]>nums[j+1]:
                        nums[j+1],nums[j]=nums[j],nums[j+1]
            return nums
        nums = pubble(nums)
        for i in range(len(nums)-1):
            if nums[i]==nums[i+1]:
                return nums[i]

总结:因为偷懒写了个冒泡排序,允许超出时间范围了。。。,如果直接调用sort函数的话,执行时间还可以的哦!
在这里插入图片描述

3.用set函数,挨个往set中add数字,如果set的len不等于i+1,那说明肯定有重复的。

Code:

    def findRepeatNumber(self, nums: List[int]) -> int:
        tmp = set()
        for i in range(len(nums)):
            tmp.add(nums[i])
            if len(tmp)<i+1:
                return nums[i]

在这里插入图片描述

references


  1. Leetcode 剑指 Offer 03. 数组中重复的数字
    . ↩︎

猜你喜欢

转载自blog.csdn.net/qq_30516823/article/details/107296381
今日推荐