【每日一题0611】找出数组中第一个重复的数字

题目:在一个长度为n的列表里的所有数字都在0到n-1的范围内。 列表中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出列表中第一个重复的数字。

例如:如果输入长度为7的列表[2,3,1,0,2,5,3],那么对应的输出是第一个重复的数字2

贡献者:上海-菠萝蜜

:cherries:​ 思路:先对原有数组排序,再找出重复的数字

def double_num(nums):
	sorted_nums = sorted(nums)
	lenth = len(sorted_nums)
	for i in range(1, lenth):
		if sorted_nums[i] == sorted_nums[i - 1]:
			print("第一个重复数字为:", sorted_nums[i])
			return True
	return false
	
nums = [2,3,1,0,2,5,3]
print(double_num(nums))

:cherries:​ 运行结果

重复数字为: 2
True

我感觉有点问题 ” 题目中是第一个重复的数字 “ 列表是有序的 所以重新进行sort排序后,循序就乱了,而找出的第一个重复的数字可能不是原本列表顺序中的第一个重复数字
例如:[5,2,4,3,3,2,1] 重新sort后 [1,2,2,3,3,4,5] ,从你的思路得到的是2,但答案应该是3

3 个赞
s = [3, 2, 3, 1, 0, 2, 5, 3]
r = []
for i in s:
    try:
        index = r.index(i)
        print(f'第一个重复的数字是:{i}')
        break
    except ValueError:
        r.append(i)

def findRepeatNum(numlist):
    d={}
    for item in numlist:
        if item in d.keys():
            return  item
        else:
            d[item]= 0

print(findRepeatNum([2, 3, 1, 0, 2, 5, 3]))

def n1(item):
for i in range(0, len(item)):
for j in range(1, len(item)):
if item[i] == item[j]:
return item[i]

思路:使用散列表来计数和查询。

def find(li):
    times = dict()
    for x in li:
        if times.get(x) is None:
            times[x] = 1    
            continue
        return x

对的,你分析的非常正确。
题目中的出现重复的数字是无序的,有可能存在一种情况,第一个重复的数字非常大并且靠前,就像你的例子。这时候排序会打乱顺序,返回结果虽然是重复但不是第一个。
为细心的你鼓掌:clap::clap::clap:

哇!你好细心哇 :kiss:,我都没有考虑到这种情况,谢谢提醒凹(๑•̀ㅂ•́)و✧

def findRepeatNum(l:list):
    l2 = []
    for i in l:
        if i not in l2:
            l2.append(i)
        else:
            return {"首次出现重复的字符是:",i}

根据列表的count函数和index函数获取

def find_num(li):
    for x in li:
        if li.count(x) > 1:
            return li[li.index(x)]
1 个赞

def find_num(numsList):
count_list =
for item in numsList:
if item in count_list:
return item
else:
count_list.append(item)

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

listR = [2,3,3,2,66,5,3333333333,1,1]
listRR = []
str = ''
number = 0

def getI(ll, nn):
    for num in ll:
        if nn == num:
            return num

for i in range(0, len(listR)):

    if listR[i] in listRR:
        nnn = getI(listR, listR[i] )
        if number>= nnn:
            number = number

    listRR.append(listR[i])

print(listR[number])
def findRepeat(list):
    list2 = []
    for i in list:
        if i not in list2:
            list2.append(i)
        else:
            return i

print(findRepeat([5,2,4,3,3,2,1]))
list_need = [2,3,1,0,2,5,3]
list_t = []
for i in list_need:
    if i not in list_t:
        list_t.append(i)
    else:
        print(i)

按顺序计数,第一个计数大于1 的就返回

def find_number(li:list):
    for i in li:
        if li.count(i)>1:
            return i


assert find_number([2, 3, 1, 0, 2, 5, 3])==2
list1 = [2,3,1,0,2,5,3]
list2 = []
for i in list1:
    a = 0
    for j in list1:
        if i == j:
            a += 1
            while a > 1:
                list2.append(a)
                break
print(list2[0])
    def firstrepeatnumber(lis: list) -> int:
        for i in range(len(lis)):
            po = lis.pop(0)
            if po in lis:
                return po
    assert firstrepeatnumber([1,2,3,4]) == None
    assert firstrepeatnumber([2,1,3,4,1,2,3,4]) == 2
    assert firstrepeatnumber([1,2,3,4,4]) == 4
    assert firstrepeatnumber([1,1,3,3]) == 1
    assert firstrepeatnumber([1,2,2,4]) == 2
1 个赞

def listrep(li):
i, j = 0, 1
for i in range(len(li)-1):
for j in range(i, len(li)):
if i != j and li[i] == li[j]:
print(li[i])
break
listrep([1, 2, 3, 2])

list1 = [2, 3, 1, 0, 2, 5, 3]
for a in list1:
for b in list1:
if a == b:
print(b)
else:
break