Это проблема от HackerRank . Моя реализация, показанная ниже, проходит большую часть теста, но для тестов, которые она провалила, говорится, что она занимает слишком много времени. Посмотрев другие материалы, я обнаружил, что реализация другого пользователя (кредит saikiran9194 ) почти сразу проходит все тесты. Мне действительно трудно понять, почему его решение является наиболее эффективным в масштабе.
Моя реализация:
m, n = map(int, input().strip().split(' '))
magazine = input().strip().split(' ')
ransom = input().strip().split(' ')
yesNo = "Yes"
for i in ransom:
if(ransom.count(i) > magazine.count(i)):
yesNo = "No"
print(yesNo)
Более эффективное по времени внедрение
def ransom_note(magazine, ransom):
rc = {} # dict of word: count of that word in the note
for word in ransom:
if word not in rc:
rc[word] = 0
rc[word] += 1
for word in magazine:
if word in rc:
rc[word] -= 1
if rc[word] == 0:
del rc[word]
if not rc:
return True
return False
m, n = map(int, input().strip().split(' '))
magazine = input().strip().split(' ')
ransom = input().strip().split(' ')
answer = ransom_note(magazine, ransom)
if(answer):
print("Yes")
else:
print("No")