双哈希统计,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);
 */
相关推荐
青 春 记 忆2 小时前
零基础入门Python11|Git实战:为任务管理器建立版本历史
开发语言·git·vscode·python·python3.11
To_OC2 小时前
LC 239 滑动窗口最大值:从暴力超时到单调队列一遍过
javascript·算法·leetcode
Python私教2 小时前
多个项目怎么安全合并?先适配,再切换
后端·python·架构
.道阻且长.3 小时前
9.LeetCode算法习题讲解--滑动窗口--无重复字符的最长字串
算法·leetcode·职场和发展·哈希算法
ltl4 小时前
HNSW:图索引如何击败树索引
算法
北斗落凡尘4 小时前
LangGraph 入门实战(12)--使用MCP
后端·python·langchain
嗯哼python4 小时前
从 0 到 1 构建 AI 模拟面试系统:RAG + LangGraph 的工程实践
人工智能·面试·职场和发展
jdksjw4 小时前
同步与异步、阻塞与非阻塞、多线程、协程超详细讲解(Python并发编程从入门到精通)
开发语言·python
Mike_Zhang5 小时前
使用python统计FreeSWITCH呼叫并发
python·freeswitch
SL-staff5 小时前
技术实践:HR如何用JVS-Logic可视化编排实现考勤数据同步(含节点配置与异常处理)
开发语言·python·低代码·钉钉·可视化编排·jvs-logic·hr技术