Вам задают вопросы. Каждый запрос имеет форму двух целых чисел, описанных ниже:
1 -: Вставьте x в структуру данных.
2 -: удалите одно из значений y из вашей структуры данных, если они есть.
3 -: Проверьте, присутствует ли какое-либо целое число, частота которого точно. Если да, напечатайте 1 еще 0.
Пример ввода: запросы = [(1,1), (2,2), (3,2), (1,1), (1,1), (2,1), (3,2)]
проблема довольно понятна, и я думаю, что у меня есть достойное решение
прокручивайте запросы и увеличивайте и уменьшайте частоты каждого числа соответственно в dict... одновременно в отдельном dict отслеживайте, сколько раз появляется каждая клавиша другого dict
при проверке наличия какого-либо целого, частота которого равна y для QUERY 3, вы должны проверить, существует ли счет y во втором dict...
Я прохожу большинство тестовых случаев, но не могу. Может кто-нибудь объяснить недостатки в моих мыслях. это убивает меня!
def freqQuery(queries):
frequency = {}
results = []
frequencyValues = {}
for query in queries:
q = query[0]
val = query[1]
if q == 1:
frequency[val] = frequency.get(val, 0) + 1
freq = frequency[val]
frequencyValues[freq] = frequencyValues.get(freq, 0) + 1
frequencyValues[freq-1] = frequencyValues.get(freq-1, 1) - 1
elif q == 2:
if val in frequency.keys():
frequency[val] += - 1
if frequency[val] < 0:
frequency[val] = 0
freq = frequency[val]
frequencyValues[freq + 1] = frequencyValues.get(freq + 1, 1) - 1
frequencyValues[freq] = frequencyValues.get(freq, 1) + 1
elif q == 3:
if val in frequencyValues.keys():
if frequencyValues[val] > 0:
results.append(1)
else:
results.append(0)
else:
results.append(0)
return results
# --stackoverflow help fixing op code
# minor code refactor and your code passes all the test cases.
elif q == 2:
if val in frequency:
freq = frequency[val]
frequencyValues[freq] = frequencyValues.get(freq, 1) - 1
frequency[val] += - 1 # <---- decrement line
frequencyValues[freq-1] = frequencyValues.get(freq-1, 1) + 1
#--------------------
if frequency[val] < 0:
frequency[val] = 0
#--------------------
# this condition should have been checked at the end as after decrement line ( frequency[val] -= 1 ) value of frequency[val] can get negative
# also frequency[val] += - 1 ---> can be better written as frequency[val] -= 1
мое решение все tc принято
from collections import defaultdict
n = int(input())
a = defaultdict(int) # num:cnt
b = defaultdict(int) # cnt: how many nums have this cnt
for tc in range(n):
op, data = map(int, input().strip().split())
if op == 1:
# insert
b[a[data]] -= 1
a[data]+=1
b[a[data]] += 1
elif op == 2:
# delete
if data in a:
b[a[data]] -= 1
a[data] -= 1
b[a[data]] += 1
a[data] = 0 if a[data] < 0 else a[data]
else:
# check if any key in b = data and has count > 0
print('1' if data in b and b[data] > 0 else '0')
первый подход, но я получал тайм-аут в 4 тестах
from collections import defaultdict
n = int(input())
data_freq_dict = defaultdict(int)
for tc in range(n):
op, data = map(int, input().strip().split())
if op == 1:
# insert
data_freq_dict[data]+=1
elif op == 2:
# delete
if data in data_freq_dict:
data_freq_dict[data] -= 1
data_freq_dict[data] = 0 if data_freq_dict[data] < 0 else data_freq_dict[data]
else:
# check if any key in data_freq_dict has count = data
print('1' if data in set(data_freq_dict.values()) else '0')