力扣2671. 频率跟踪器

题目

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

实现 FrequencyTracker 类:

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

计数器 是很常用的工具技术,例如在Python中甚至提供了内置的计数器类Counter,可以通过学习它进一步了解计数器的概念及使用:https://zhuanlan.zhihu.com/p/649737648

FrequencyTracker类:

FrequencyTracker():使用一个空数组初始化 FrequencyTracker对象。

void add(int number):添加一个 number到数据结构中。

void deleteOne(int number)

:从数据结构中删除一个 number 。数据结构 可能不包含 number ,在这种情况下不删除任何内容。

bool hasFrequency(int frequency): 如果数据结构中存在出现 frequency次的数字,则返回 true,否则返回 false。

使用哈希表定义数与频率;

class FrequencyTracker {

private:

    unordered_map<int,int>n;

    unordered_map<int,int>f;

public:

    FrequencyTracker()

    {



    }



    void add(int number)

    {

    if(n[number])//不为零

    {

        f[n[number]]--;//原数的频率减一

    }

    n[number]++;//数加一

    f[n[number]]++;//添加后的频率加一



    }



    void deleteOne(int number)

    {

    if(n[number])

    {

    f[n[number]]--;

    n[number]--;

    f[n[number]]++;

    }

    }



    bool hasFrequency(int frequency)

    {

    if(f[frequency])

        return true;

    else

        return false;

    }

};

 这道题主要使用了哈希表,需要我们学会哈希表的定义,哈希表是一种根据关键码值而直接进行访问的数据结构。

它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。具体来说,哈希表会通过某种哈希算法计算一个键值的函数(这个函数也叫哈希函数或散列函数),并将所查询的数据映射到某个位置以供访问,借此加快查找特定键值的速度。

可以进行快速查找,避免重复,缓存处理,时间复杂度很低为O(1)。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值