天天刷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. 数组中重复的数字
    . ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值