В этой задаче нам дается двухмерный запрос, например:
queries = [[1, 1], [2, 2], [3, 2], [1, 2], [1, 1], [1, 1], [2, 1], [3, 2]]
Каждый запрос имеет форму,
1 x -> insert x
2 y -> удалить одно вхождение y
3 z -> Проверить, присутствует ли какое-либо целое число, частота которого точно равна z. Если да, напечатайте 1 else 0
Например,
Operation Array Output
(1,1) [1]
(2,2) [1]
(3,2) 0
(1,1) [1,1]
(1,1) [1,1,1]
(2,1) [1,1]
(3,2) 1
В приведенном выше примере возвращается массив с выводом: [0, 1]
Мое решение:
def freqQuery(queries):
res = Counter()
output = []
for op, value in queries:
if op == 1:
res[value] += 1
elif op == 2:
if value in res.keys():
res[value] -= 1
elif op == 3:
if value in res.values():
output.append(1)
else:
output.append(0)
return output
Ссылка на проблему: https://www.hackerrank.com/challenges/frequency-queries/problem
Тесты 4/15 не проходят с 3 неправильными ответами и одним с превышением лимита времени. Может кто подскажет, что не так с кодом?
Обновление:
Спасибо за помощь! Мой второй запрос был неверным.
Новое решение:
def freqQuery(queries):
res = Counter()
output = []
for op, value in queries:
if op == 1:
res[value] += 1
elif op == 2:
if res[value] > 0:
res[value] -= 1
elif op == 3:
if value in res.values():
output.append(1)
else:
output.append(0)
return output
Хотя я все еще не проваливаю один тестовый пример, т.е. превышаю лимит времени. Что я мог сделать, чтобы повысить эффективность кода?