Код работает медленно, Python
код должен считать кол-во одинаковых пар, затем отталкиваясь от этого составить кол-во параллелограммов, которые мы можем сделать из пар (2 пары - 1 параллелограмм) это задание из пробного тура, сдал ее и на тесте 60 (их всего 100) выдало ошибку - Превышено максимальное время работы (>1.000с) Как исправить код, чтобы он работал быстрее?
n = int(input()) # он тут не нужен но для задачи нужен был, но он ничего в коде не делает
a = [int(a) for a in input().split()] # создает список из n-чисел
count = 0
counter = 0
# цикл для счета одинаковых пар
for j in range(len(a)):
if a[j] != -1:
for jj in range(j + 1, len(a)):
if a[j] == a[jj]:
count += 1
a[j] = -1
a[jj] = -1
break
counter=count//2 # считает кол-во параллелограммов
print(counter)
Ответы (3 шт):
Посмотрите в сторону словарей (а лучше defaultdict), тогда не придётся использовать вложенные циклы для подсчёта количества пар.
from collections import defaultdict
a = [int(x) for x in str(input())]
counts = defaultdict(int)
for number in a:
counts[number] += 1
pairs = 0
for count in counts.values():
pairs += count // 2
print(pairs)
a = [int(a) for a in input().split()] # создает список из n-чисел
# Используем словарь для подсчета количества вхождений каждого элемента
element_count = {}
for num in a:
if num in element_count:
element_count[num] += 1
else:
element_count[num] = 1
# Считаем количество одинаковых пар
count = 0
for value in element_count.values():
count += value // 2
# Считаем количество параллелограммов
counter = count // 2
print(counter)
collections.Counter считает количества одинаковых элементов в последовательности.
Затем суммируются счётчики делённые пополам с остатком. Это число пар равных элементов. Его ещё раз делим пополам с остатком чтобы получить число параллелограммов.
import collections
input()
c = collections.Counter(input().split())
print(sum(v // 2 for v in c.values()) // 2)