数组中重复的数字


找出数组中重复的数字。

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

示例 1:

输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3

限制:
2 <= n <= 100000
方法1:
直接使用count函数,进行统计,遇到出现次数不为1的直接输出即可。
【错误】:超过了限定的时间

python
class Solution(object):
    def findRepeatNumber(self, nums):
        for i in nums:
            if nums.count(i) != 1:    #统计出现的次数,如果不为1,直接输出,并且返回
                print(i)                      #循环结束
                return i
        return  '#'

方法2
思路:排序方法
1、先将数组排好序
2、在查找重复数字:先用第一个元素进行对比,如果后边有和它相等的,直接返回该元素,没有的话,用第二个元素和后继的元素依次比较。
时间复杂度O(nlogn),空间复杂度O(1)

class Solution(object):
 def findRepeatNumber(self, nums):
     nums.sort()        #排序
     p = nums[0]                #将第一个元素赋给p
     for i in range(1, len(nums)):    #对列表从第二个元素开始遍历
         if p == nums[i]:                 #如果P=
             return p
         pre = nums[i]

方法3
思路:使用字典。
1、遍历整个数组,当这个数字没有出现过字典里有的元素的时候,将其加入进去,如果字典中存在,直接返回即可
2、时间复杂度O(n),空间复杂度O(n)

    class Solution(object):
    def findRepeatNumber(self, nums):
        dic = {}                  #定义空字典
        for i in nums:     #遍历数组
            if i not in dic:      #判断数组元素是否在字典中,不在的话,就放进字典即可
                dic[i] = 0          #value随便赋,因为是对key进行操作
            else:              #否则,直接返回重复元素
                return i
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐