Python Найти уникальное число с помощью списка из 100 нулей

Рейтинг: 2Ответов: 2Опубликовано: 31.01.2023

Здравствуйте, учусь Питону. Столкнулся с задачей:

У вас есть список от 0 до 99, в нем повторяются числа, кроме одного. Используйте список из ста нулей, чтоб найти уникальное число.

Нужно именно так, остальные способы я сделал через xor и перебором, нужно именно через список с нулями.

list2 = [0, 1, 3, 4, 7, 98, 3, 1, 98, 7, 16, 16, 4, 0, 42, 54, 54, 6, 6] 
list3 = [0] * 100 
for i in range(len(list3)):
    z = 0
    for j in range(len(list2)): 
        if list3[i] == list2[j]: 
            i += 1 
            j += 1 
            z += 1
        else: 
            list3[i] != list2[j] `
            print(list2[j], z) 
    break

В каком направлении думать? И если кто переделает код, укажите пожалуйста комментариями, что откуда выполняется.

Ответы

▲ 2Принят
for i in list2:
    list3[i] += 1

result = list3.index(1)    
print(f"Уникальное число: {result}")

Вывод для вашего списка list2:

Уникальное число: 42


Объяснение:

Присвоим каждому целому числу из диапазона 0-99 число на соответствующей позиции в списке list3 (пока речь не идет о списке list2). Здесь таблица:

числа:  0  1  2  3  4  5  6  ...  97  98  99 
        ↓  ↓  ↓  ↓  ↓  ↓  ↓        ↓   ↓   ↓
list3:  0  0  0  0  0  0  0  ...   0   0   0             ← сначала самые нули

Теперь начинаем проходить списком list2 - в нем находятся только числа из первой строки нашей таблицы:

for i in list2: 

Для каждого числа в этом списке повысим соответствующее число в последней строке нашей таблицы:

    list3[i] += 1

Значит, когда находим (например) число 4 первый раз:

числа:  0  1  2  3 |4| 5  6  ...  97  98  99 
        ↓  ↓  ↓  ↓ |↓| ↓  ↓        ↓   ↓   ↓
list3:  ?  ?  ?  ? |1| ?  ?  ...   0   0   0 
                    ↑  

и когда затем его встретим второй раз:

числа:  0  1  2  3 |4| 5  6  ...  97  98  99 
        ↓  ↓  ↓  ↓ |↓| ↓  ↓        ↓   ↓   ↓
list3:  ?  ?  ?  ? |2| ?  ?  ...   ?   ?   ? 
                    ↑

В результате мы в списке list3 получим

  • 0 (нули) - для чисел из диапазона 0-99, с которыми мы в списке list2 не встретились
  • 1 (единицу) - только одну, для уникального числа
  • 2 - для чисел, которые мы встретили дважды
  • 3 - для чисел, которые мы встретили трижды
  • ... и т.д.

Значит, достаточно только обнаружить позицию (индекс) этой единицы:

result = list3.index(1) 
▲ 2

Для каждого числа x из первого списка выполните

list3[x] += 1

Потом проверьте, какие элементы равны единице