Skip to main content
Back to problems
#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)
LeetCode
solution.rs
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
  }
}