Hackerrank频率查询

2024-10-01 11:23:27 发布

您现在位置:Python中文网/ 问答频道 /正文

你会被询问。每个查询的格式为下面描述的两个整数:

1-:在数据结构中插入x。在

2-:从数据结构中删除一次y(如果存在)。在

3-:检查是否存在频率恰好为的整数。如果是,则打印1或0。在

输入示例: 查询=[(1,1),(2,2),(3,2),(1,1),(1,1),(2,1),(3,2)]

这个问题是不言自明的,我想我有一个像样的解决办法

循环查询,并在dict中相应地递增和递减每个数字的频率 ... 同时在一个单独的dict中记录另一个dict的每个键出现的次数

当检查查询3中是否存在频率恰好为y的整数时,您将检查第二个dict中y的计数是否存在。。。在

我通过了大多数测试用例,但有些测试失败了。。谁能解释一下我的思维缺陷吗。这真是要杀了我!在

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

Tags: in数据结构getif整数valqueryresults
1条回答
网友
1楼 · 发布于 2024-10-01 11:23:27
#  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均接受

^{pr2}$

第一种方法,但我在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')

相关问题 更多 >