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

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

def solution(nums):
    flag = 1
    while flag:
        i = 0
        while i < len(nums):
            for j in range(i + 1, len(nums)):
                if nums[i] == nums[j]:
                    flag = 0
                    return nums[i]
            if flag == 1:
                i += 1

assert solution([2,3,1,0,2,5,3]) == 2
assert solution([2,3,1,0,5,3]) == 3
import org.junit.Test;
import java.util.*;
import static org.junit.jupiter.api.Assertions.*;


public class RepeatedNumber {

    @Test
    public void testCase() {

        assertAll(()->{
            assertEquals(repeatedNumber(new int[]{1, 0, 3, 2, 3, 4, 6, 7, 7}),3);
            assertEquals(repeatedNumber(new int[]{2,3,1,0,2,5,3}),2);
            assertEquals(repeatedNumber(new int[]{ 2, 3, 4, 6, 7, 7}),7);
            assertEquals(repeatedNumber(new int[]{1, 0, 3, 2,  4, 6, 7, }),-1);


        });
    }

    public int repeatedNumber(int[] list) {
        Set<Integer> map = new HashSet<>();
        int repeat = -1;
        for (int num : list) {
            if (!map.add(num)) {
                repeat = num;
                break;
            }
        }
        return repeat;
    }
}

可以参考两数之和的解题思路:
1.每个数字往前比较,如果数字已经存在,说明是重复数字
2.使用dict而不是list,可以将每个数的查询时间从O(n)降为O(1)

def solution(nums: list):
    # your code here
    return [i for i in set(nums) if nums.count(i) > 1][0]


assert solution([2, 3, 1, 0, 2, 5, 3]) == 2
assert solution([5, 2, 4, 3, 3, 2, 1]) == 2
def solution(nums: list):
    from collections import Counter
    for value,count in Counter(nums).items():
        if count >1:
            return value

#思路:每个元素和他前面的元素对比,相同就返回。不同继续找后一个

def find_firstdulp(nums):
    for i in range(len(nums)-1):
           if nums[i+1] in nums[0:i+1]:  
               return nums[i+1]
nums = [2,3,3,2]
print(find_firstdulp(nums))
def find_num(li):
    for i in li:
        if li.count(i) > 1:
            return i
public int reSeeMember(int[] memberList) {
        int reSeeMember = 0;
        List list =new ArrayList<>();
        for (int i = 0; i < memberList.length; i++) {
            for (int j = i+1; j < memberList.length; j++) {
                if (memberList[i] == memberList[j]) {
                    //使用赋值的形式后面的会覆盖前面的内容。所以使用集合
                    list.add(memberList[i]);
                }
            }
        }
        //取集合中的第一个元素,第一个为最开始重复的数
        reSeeMember = (int) list.get(0);
        return reSeeMember;
    }
    @Test
    void testCase_03(){
        assertAll(()->{
            assertEquals(reSeeMember(new int []{2,3,1,0,2,5,3}),2);
            assertEquals(reSeeMember(new int []{23,45,2,45,67,8}),45);
            assertEquals(reSeeMember(new int []{21,31,11,11,22,50,39}),11);
            assertEquals(reSeeMember(new int []{222,32,13,3,2,5,3}),3);
        });
    }
def findfirstrepeatnum(M:list):
	for i in range(len(M) - 1):
		for j in range(1 + i, len(M)):
			if M[i] == M[j]:
				return M[i]
			break
		



findfirstrepeatnum([3,3,1,0,2,5,3])==3

count=0
def fun(list1):
for i in list1:
global count
count=list1.count(i)
if count>1:
print(f’第一个重复的数据字是{i},重复次数:{count}')
break
fun([2,3,1,0,2,5,3])

def solution(nums: list):
    for i in range(len(nums)):
        if nums[i] in nums[:i]:
            return nums[i]

li = [2,3,1,0,2,5,3]
t = {}
for i in li:
if t.get(i):
print(i)
break
else:
t[i] = 1

lst = [6,8,5,3,4,2,1,7,3,5,8,9]

def repeatedNum(lst):
    for i in range(len(lst)):
        for j in range(i+1,len(lst)):
            if lst[i] == lst[j]:
                print("第一组相同的数为:", lst[i])
                break
        else:
            continue
        break

repeatedNum(lst)
def double_num(nums):
    dict={}
    for i in range(len(nums)):
        if nums[i] not in dict.keys():
            dict[nums[i]]=1
        else:
            return nums[i]

assert double_num([2,3,1,0,2,5,3])==2