большинство решений, которые я отправляю в hackerrank, вызывают ошибку тайм-аута, поэтому я попытался найти время выполнения для одного из кодов в возвышенном тексте 3 на моем компьютере и привел к [завершению в 220,5 сек.] для ввода 2 миллионов вход.
постановка проблемы: https://www.hackerrank.com/challenges/py-the-captains-room/problem
мое решение:
n=int(input())
l_list=list(map(int,(input().split())))
l_set=set(l_list)
for i in l_set:
c=l_list.count(i)
if c==1:
print(i)
пожалуйста, помогите мне в оптимизации кода или моя система слишком медленная???
Я столкнулся с такой же проблемой с моим кодом ниже.
k=int(input())
a_list=list(input().split())
a_set=set(a_list)
for each in a_set:
if(a_list.count(each)!=k):
print(each)
Хитрость заключается в использовании счетчика из коллекций. См. Обсуждение ниже. Как подсчитать вхождения элемента списка?
Ваш цикл равен O (n ^ 2), поскольку list.count
- O (n). Также создание набора - это операция O (n), которую вы можете пропустить.
Вы должны подумать о попытке пройти через ваш массив один раз и сделать все подсчет. Теперь вы просматриваете все элементы в наборе, и для каждого из элементов l_list.count(i)
проходит через список один раз, это дает вам ужасную производительность O (n ^ 2).
Я не хочу давать вам прямой ответ, поскольку задача предназначена для обучения...