Hackerrank Frequency Queries

1

Вам задают вопросы. Каждый запрос имеет форму двух целых чисел, описанных ниже:

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
Теги:

1 ответ

1
Лучший ответ
# --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')
  • 1
    Большое спасибо - я знал, что это проблема с этим диктом, я просто не мог найти, почему с любым тестовым примером разумного размера
  • 0
    @ user1990406 см обновленный ответ

Ещё вопросы

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