время выполнения программы на питоне

1

большинство решений, которые я отправляю в 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)

пожалуйста, помогите мне в оптимизации кода или моя система слишком медленная???

Теги:
python-3.x

2 ответа

0

Я столкнулся с такой же проблемой с моим кодом ниже.

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)

Хитрость заключается в использовании счетчика из коллекций. См. Обсуждение ниже. Как подсчитать вхождения элемента списка?

  • 0
    Из обзора: добро пожаловать в стек переполнения! Хотя ссылки являются отличным способом обмена знаниями, они не будут действительно отвечать на вопрос, если они будут нарушены в будущем. Добавьте к своему ответу основное содержание ссылки, которая отвечает на вопрос. В случае, если содержание слишком сложное или слишком большое, чтобы поместиться здесь, опишите общую идею предложенного решения. Не забывайте всегда сохранять ссылку на сайт оригинального решения. Смотрите: Как мне написать хороший ответ?
0

Ваш цикл равен O (n ^ 2), поскольку list.count - O (n). Также создание набора - это операция O (n), которую вы можете пропустить.

Вы должны подумать о попытке пройти через ваш массив один раз и сделать все подсчет. Теперь вы просматриваете все элементы в наборе, и для каждого из элементов l_list.count(i) проходит через список один раз, это дает вам ужасную производительность O (n ^ 2).

Я не хочу давать вам прямой ответ, поскольку задача предназначена для обучения...

  • 0
    Я на самом деле нашел решение (простая арифметическая формула в одну строку с использованием sum ()), но я действительно хотел знать решение, если 'n' не фиксировано (или не задано) !!!!
  • 0
    @sunilkumar Вот, пожалуйста, сравнение пары разных алгоритмов gist.github.com/Andrew-Morozko/04da247c4aaa7e90745db0d70ee8e13d

Ещё вопросы

Сообщество Overcoder
Наверх
Меню