题目
请你设计并实现一个能够对其中的值进行跟踪的数据结构,并支持对频率相关查询进行应答。
实现 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)。