Количество совпадающих пар
Вы решили задачу. Теперь можно сравнить подходы.
Каждый новый элемент образует пары со всеми прежними равными.
Авторский разбор для локальной версии на основе условия задачи. Это не выгрузка чужих посылок и не официальное решение исходного сайта.
Ваше принятое решение
Рекомендуемое решение: Частоты на ходу
Пара учитывается ровно при обработке её правого элемента.
a = list(map(int, input().split()))
counts = {}
answer = 0
for x in a:
answer += counts.get(x, 0)
counts[x] = counts.get(x, 0) + 1
print(answer)
Время: O(n) в среднем. Память: O(n).
Другой способ: Все пары индексов
Перебор j<i исключает повторный подсчёт и пары элемента с самим собой.
a = list(map(int, input().split()))
answer = 0
for i in range(len(a)):
for j in range(i):
if a[i] == a[j]:
answer += 1
print(answer)
Время: O(n²). Память: O(n).
На что обратить внимание
- Для k одинаковых чисел получается k(k−1)/2 пар.
Рекомендация учитывает сложность и читаемость для этой задачи. Единственного самого быстрого решения для всех размеров входа и всех компьютеров может не быть.