双哈希统计,LeetCode 2671. 频率跟踪器

一、题目

1、题目描述

请你设计并实现一个能够对其中的值进行跟踪的数据结构,并支持对频率相关查询进行应答。

实现 FrequencyTracker 类:

  • FrequencyTracker():使用一个空数组初始化 FrequencyTracker 对象。
  • void add(int number):添加一个 number 到数据结构中。
  • void deleteOne(int number):从数据结构中删除一个 number 。数据结构 可能不包含 number ,在这种情况下不删除任何内容。
  • bool hasFrequency(int frequency): 如果数据结构中存在出现 frequency 次的数字,则返回 true,否则返回 false

2、接口描述

python3
python 复制代码
class FrequencyTracker:

    def __init__(self):


    def add(self, number: int) -> None:


    def deleteOne(self, number: int) -> None:


    def hasFrequency(self, frequency: int) -> bool:



# Your FrequencyTracker object will be instantiated and called as such:
# obj = FrequencyTracker()
# obj.add(number)
# obj.deleteOne(number)
# param_3 = obj.hasFrequency(frequency)
​cpp
cpp 复制代码
class FrequencyTracker {
public:
    FrequencyTracker() {

    }
    
    void add(int number) {

    }
    
    void deleteOne(int number) {

    }
    
    bool hasFrequency(int frequency) {

    }
};

/**
 * Your FrequencyTracker object will be instantiated and called as such:
 * FrequencyTracker* obj = new FrequencyTracker();
 * obj->add(number);
 * obj->deleteOne(number);
 * bool param_3 = obj->hasFrequency(frequency);
 */

3、原题链接

2671. 频率跟踪器


二、解题报告

1、思路分析

2、复杂度

时间复杂度: 单词操作O(1)空间复杂度:O(n),n为操作次数

3、代码详解

​python3
cpp 复制代码
class FrequencyTracker:

    def __init__(self):
        self.cnt = Counter()
        self.freq = Counter()

    def add(self, number: int, delta = 1) -> None:
        self.freq[self.cnt[number]] -= 1
        self.cnt[number] += delta
        self.freq[self.cnt[number]] += 1

    def deleteOne(self, number: int) -> None:
        if self.cnt[number]:
            self.add(number, -1)

    def hasFrequency(self, frequency: int) -> bool:
        return self.freq[frequency] > 0


# Your FrequencyTracker object will be instantiated and called as such:
# obj = FrequencyTracker()
# obj.add(number)
# obj.deleteOne(number)
# param_3 = obj.hasFrequency(frequency)
cpp
cpp 复制代码
class FrequencyTracker {
public:
    unordered_map<int, int> cnt, freq;
    FrequencyTracker() {

    }
    
    void add(int number) {
        freq[cnt[number]]--, freq[++cnt[number]]++;
    }
    
    void deleteOne(int number) {
        if(cnt[number])
            freq[cnt[number]]--, freq[--cnt[number]]++;
    }
    
    bool hasFrequency(int frequency) {
        return freq[frequency] > 0;
    }
};

/**
 * Your FrequencyTracker object will be instantiated and called as such:
 * FrequencyTracker* obj = new FrequencyTracker();
 * obj->add(number);
 * obj->deleteOne(number);
 * bool param_3 = obj->hasFrequency(frequency);
 */
相关推荐
夜天炫安全1 小时前
数据结构中所需的C语言基础
c语言·数据结构·算法
小陳参上2 小时前
用Python创建一个Discord聊天机器人
jvm·数据库·python
2301_789015622 小时前
DS进阶:AVL树
开发语言·数据结构·c++·算法
minstbe4 小时前
IC设计私有化AI助手实战:基于Docker+OpenCode+Ollama的数字前端综合增强方案(进阶版)
人工智能·python·语言模型·llama
zyq99101_15 小时前
优化二分查找:前缀和降复杂度
数据结构·python·蓝桥杯
qyzm5 小时前
天梯赛练习(3月13日)
开发语言·数据结构·python·算法·贪心算法
逆境不可逃5 小时前
LeetCode 热题 100 之 64. 最小路径和 5. 最长回文子串 1143. 最长公共子序列 72. 编辑距离
算法·leetcode·动态规划
CoderCodingNo6 小时前
【GESP】C++五级练习题 luogu-P1182 数列分段 Section II
开发语言·c++·算法
放下华子我只抽RuiKe56 小时前
机器学习全景指南-直觉篇——基于距离的 K-近邻 (KNN) 算法
人工智能·gpt·算法·机器学习·语言模型·chatgpt·ai编程
kisshuan123966 小时前
[特殊字符]【深度学习】DA3METRIC-LARGE单目深度估计算法详解
人工智能·深度学习·算法