#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)
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);
*/