首页 > 试题广场 >

数组中重复的数字

[编程题]数组中重复的数字
  • 热度指数:171827 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1

数据范围:
进阶:时间复杂度,空间复杂度
示例1

输入

[2,3,1,0,2,5,3]

输出

2

说明

2或3都是对的    

python一行解法

class Solution:
    def duplicate(self , numbers ):
        # write code here
        x = list(filter(lambda n:numbers.count(n)>1, numbers))
        return x[0] if x else -1


发表于 2021-11-04 00:13:41 回复(0)
class Solution:
    def duplicate(self , numbers ):
        # write code here
        Num = [0,1,2,3,4,5,6,7,8,9]
        Set1 = set()
        for num in numbers:
            if isinstance(num, int):
                if num in Set1:
                    return num
                Set1.add(num)
            else:
                return -1
        return -1

发表于 2021-08-24 16:14:21 回复(0)
一个奇怪的问题,使用载入示例[2,3,1,0,2,5,3],程序运行没有问题,但是示例简单变更下[[2,3,1,0,2,5],就出现格式错误了,请教下啥原因?
class Solution:
    def duplicate(self , numbers ):
        # write code here
        n=len(numbers)
        for i in range(n):
            for j in range(n):
                if i!=j and numbers[i]==numbers[j]:
                    return numbers[i]
        return -1

发表于 2021-06-12 17:41:30 回复(0)
class Solution:
    def duplicate(self , numbers ):
        # write code here
        a=set(numbers)
        for i in a:
            if numbers.count(i)>1:
                return i
        return -1 
发表于 2021-05-08 16:25:35 回复(0)

数组中重复的数字-替换法(O(n),O(1))

python中,for循环不能改变其中 i 的值。
调通的python版本代码如下。
class Solution:
    def duplicate(self , numbers ):
        # write code here
        i = 0
        length = len(numbers)
        while i < length:
            if numbers[i] != i:
                if numbers[i] == numbers[numbers[i]]:
                    return numbers[i]
                temp = numbers[numbers[i]]
                numbers[numbers[i]] = numbers[i]
                numbers[i] = temp
                i -= 1
            i += 1
        return -1

发表于 2021-04-23 14:15:10 回复(0)
Python第一个想法是用count,但这样就很费时间。第二个想法是记下已经出现过的数。
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param numbers int整型一维数组 
# @return int整型
#
class Solution:
    def duplicate(self , numbers ):
        # write code here
        if len(numbers)<0:
            return -1
        visited = set()
        numbers.sort()
        for x in numbers:
            if x not in visited:
                visited.add(x)
            else:
                return x
        return -1


发表于 2021-04-17 22:10:32 回复(0)
感觉不是最佳 小垃圾一个 嘿嘿
class Solution:
    def duplicate(self , numbers ):
        if not numbers&nbs***bsp;len(numbers)==0:
            return -1
        n=len(numbers)
        s=sorted(numbers)
        k=0
        for i in range(n-1):
            if s[i]==s[i+1]:
                k+=1
                return s[i]
        if k==0:
            return -1

发表于 2021-04-10 16:40:45 回复(0)
创建一个空的集合,然后遍历列表中的元素,当集合中没有这个元素时,就在集合中添加这个元素,如果有这个元素,就return
class Solution:
    def duplicate(self , numbers ):
        jihe=set()
        for i in numbers:
            if i not in jihe:
                jihe.add(i)
            else:
                return i
        return -1

发表于 2021-03-24 14:00:58 回复(0)
class Solution:
    def duplicate(self , numbers ):
        a = [0]*len(numbers)
        for n in numbers:
            a[n] += 1
        for n in numbers:
            if a[n] > 1:
                return n
        return -1


        
编辑于 2021-03-01 14:15:49 回复(0)