#2671
Medium Algorithms Frequency tracker
Hash Table Design
30.9% acceptance
Feb 23, 2026
345
31
Design a data structure that keeps track of the values in it and answers some queries regarding their frequencies.
Implement the FrequencyTracker class.
FrequencyTracker(): Initializes the FrequencyTracker object with an empty array initially.
void add(int number): Adds number to the data structure.
void deleteOne(int number): Deletes one occurrence of number from the data structure.
bool hasFrequency(int frequency): Returns true if there is a number in the data structure that occurs frequency number of times, otherwise, it returns false.
Solution
Rust
Time O(2^n)
Space O(n)
use std::collections::HashMap;
struct FrequencyTracker {
count: HashMap<i32, i32>,
freq_count: HashMap<i32, i32>,
}
impl FrequencyTracker {
fn new() -> Self {
FrequencyTracker {
count: HashMap::new(),
freq_count: HashMap::new(),
}
}
fn add(&mut self, number: i32) {
let old = *self.count.get(&number).unwrap_or(&0);
if old > 0 {
*self.freq_count.entry(old).or_insert(0) -= 1;
}
let new_cnt = old + 1;
self.count.insert(number, new_cnt);
*self.freq_count.entry(new_cnt).or_insert(0) += 1;
}
fn delete_one(&mut self, number: i32) {
let old = *self.count.get(&number).unwrap_or(&0);
if old == 0 { return; }
*self.freq_count.entry(old).or_insert(0) -= 1;
let new_cnt = old - 1;
self.count.insert(number, new_cnt);
if new_cnt > 0 {
*self.freq_count.entry(new_cnt).or_insert(0) += 1;
}
}
fn has_frequency(&self, frequency: i32) -> bool {
*self.freq_count.get(&frequency).unwrap_or(&0) > 0
}
}