Skip to main content
Back to problems
#1429
Medium Algorithms

First unique number

Array Hash Table Design Queue Data Stream
57.3% acceptance
Mar 31, 2026
606
35
First Unique Number - Using HashMap + ordered list with head pointer The actual struct and impl are in the test file since this is a design problem.

Solution

Rust
Time O(n)
Space O(n)
LeetCode
solution.rs
struct FirstUnique {
  queue: std::collections::VecDeque<i32>,
  count: std::collections::HashMap<i32, usize>,
}


/** 
 * `&self` means the method takes an immutable reference.
 * If you need a mutable reference, change it to `&mut self` instead.
 */
impl FirstUnique {

  fn new(nums: Vec<i32>) -> Self {
    let mut first_unique = Self {
      queue: std::collections::VecDeque::new(),
      count: std::collections::HashMap::new(),
    };

    for value in nums {
      first_unique.add(value);
    }

    first_unique
  }
  
  fn show_first_unique(&self) -> i32 {
    self.queue.front().copied().unwrap_or(-1)
  }
  
  fn add(&mut self, value: i32) {
    let entry = self.count.entry(value).or_insert(0);
    *entry += 1;

    if *entry == 1 {
      self.queue.push_back(value);
    }

    while let Some(&front) = self.queue.front() {
      if self.count.get(&front).copied().unwrap_or(0) == 1 {
        break;
      }
      self.queue.pop_front();
    }
  }
}

/*
 * Your FirstUnique object will be instantiated and called as such:
 * let obj = FirstUnique::new(nums);
 * let ret_1: i32 = obj.show_first_unique();
 * obj.add(value);
 */