LeetCode
频率跟踪器
题目链接:2671. 频率跟踪器 - 力扣(LeetCode)
题目描述
思路
代码
C++
class FrequencyTracker {
unordered_map<int, int> cnt; // number的出现次数
unordered_map<int, int> freq; // number的出现次数的出现次数
public:
FrequencyTracker() {
}
void add(int number) {
--freq[cnt[number]];
++freq[++cnt[number]];
}
void deleteOne(int number) {
if(!cnt[number]) return;
--freq[cnt[number]];
++freq[--cnt[number]];
}
bool hasFrequency(int frequency) {
return freq[frequency];
}
};
Java
class FrequencyTracker {
private final Map<Integer, Integer> cnt = new HashMap<>();
private final Map<Integer, Integer> freq = new HashMap<>();
public FrequencyTracker() {
}
public void update(int number, int delta){
int c = cnt.merge(number, delta, Integer::sum);
freq.merge(c - delta, -1 , Integer::sum);
freq.merge(c, 1 , Integer::sum);
}
public void add(int number) {
update(number, 1);
}
public void deleteOne(int number) {
if(cnt.getOrDefault(number,0) > 0){
update(number, - 1);
}
}
public boolean hasFrequency(int frequency) {
return freq.getOrDefault(frequency, 0) > 0;
}
}