Почему мои коды выдают ошибку тайм-аута при проблемах с хакерранком, тайм-аут при огромных входах в список - PullRequest
0 голосов
/ 13 февраля 2019

Я начинающий программист на Python (самообучение онлайн), я начал решать проблемы с кодированием на hackerrank, но мне трудно понять, почему мой код выдает ошибку тайм-аута.Мне не хватает руководства. Пожалуйста, подскажите, что мне следует узнать, чтобы понять, как быстрее выполнять коды.

Пример задачи, которую я кодировал -

У нас есть список слов вжурнал и список слов, необходимых для записи.мы должны проверить, есть ли в журнале все слова, которые нам нужны, чтобы сделать заметку.выведите «Да», если доступны все слова, если «нет», выведите «Нет».

mag = 'ive got a lovely bunch of coconuts'.split()
note = 'ive got some coconuts'.split()

Я определил две функции -

функция ниже дает тайм-аутдля большого списка слов, и я не понимаю, почему.эта функция просто проверяет, есть ли каждое требуемое слово в журнале, и я выскакиваю уже использованное слово.

функция 1

def checkMagazine(magazine, note):
    ans = 'Yes'    
    for i in note:        
        if i not in magazine:
            ans = 'No'
            break
        else:            
            magazine.pop(magazine.index(i))
    print(ans)

Функция 2 (работаеточень быстро и пройти весь тест (я следовал чьему-то коду))

эта функция создает словарь, просматривает каждое слово в журнале и сохраняет количество слов в словаре.и снова циклически перебирать слова в словаре, сравнивать с необходимыми словами и затем выводить, и все же это быстрее, чем непосредственно проверять слова в двух списках.

def checkMagazine2(magazine, note):
    ans = 'Yes'
    d = defaultdict(int)
    for word in magazine:        
        d[word]+=1
    for word in note:
        if d[word] == 0:

            ans = 'No'
            break
        else:
            d[word]-=1
    print(ans)

в большинстве кодов, которые я пытаюсь решить, я сталкиваюсь с ошибками тайм-аутав огромном списке.Я стараюсь продолжать кодировать, и после стольких неудач я становлюсь демотивированным и трачу свое время на онлайн игры.Мне действительно нужно найти работу в ближайшее время, пожалуйста, кто-нибудь направит меня.

1 Ответ

0 голосов
/ 13 февраля 2019

Вы получаете TLE, потому что поиск элементов в lists занимает O(n) время.Но второе решение быстрое, потому что оно использует dictionary и требует времени для поиска, то есть O(1).

...