0
点赞
收藏
分享

微信扫一扫

剑指Offer 03.数组中的重复数字

盖码范 2022-03-12 阅读 72
python

一、题目描述

题目来自剑指Offer 03,难度简单。

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

二、题目解析
Python中的集合set是一个无序的不重复元素序列。在长度为n的数组中,所有数字的都在0~n-1的范围内,可以通过循环数组,判断当前的数字是否已经存储在集合set中,那么会有三种情况:

  • 当前数字已经存储在集合set中,说明是重复数字,则返回当前数字;
  • 当前数字没有存储在集合set中,说明不是重复数字,则将当前数字存储进集合set中;
  • 循环完整个数组后,没有发现重复数字,则返回不在0~n-1范围内的数字表明没有重复数字,比如可返回1.

三、参考代码

class Solution:
    def findRepeatNumber(self, nums: List[int]) -> int:
        # set的特点是不会存储重复的元素
        # 这里定义一个集合用来放不重复的数字
        nums_set = set()

        # 遍历列表nums,设置此时遍历的元素为num
        for num in nums:
            # 如果发现set中有该数字num
            # 那么说明找到了重复的那个元素
            if num in nums_set:
                return num
            # 否则的话,说明set中还没有存储该数字num
            else:
                nums_set.add(num)
        # 因为所有数字都在0~n-1的范围内
        # 所以负数必然不在这个范围内,比如-1
        # 那么就可以返回-1来表示没有找到重复数字
        ruturn -1
举报

相关推荐

0 条评论