Python Найти уникальное число с помощью списка из 100 нулей
Здравствуйте, учусь Питону. Столкнулся с задачей:
У вас есть список от 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 шт):
Для каждого числа x из первого списка выполните
list3[x] += 1
Потом проверьте, какие элементы равны единице
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)