#379
Medium Algorithms Design phone directory
Array Hash Table Linked List Design Queue
53.2% acceptance
Mar 31, 2026
369
485
No description available.
Solution
Rust
Time O(1)
Space O(n)
use std::collections::VecDeque;
struct PhoneDirectory {
available: VecDeque<i32>,
in_use: Vec<bool>,
}
impl PhoneDirectory {
fn new(max_numbers: i32) -> Self {
let n = max_numbers as usize;
let available = (0..max_numbers).collect();
PhoneDirectory {
available,
in_use: vec![false; n],
}
}
fn get(&mut self) -> i32 {
if let Some(num) = self.available.pop_front() {
self.in_use[num as usize] = true;
num
} else {
-1
}
}
fn check(&self, number: i32) -> bool {
!self.in_use[number as usize]
}
fn release(&mut self, number: i32) {
let idx = number as usize;
if self.in_use[idx] {
self.in_use[idx] = false;
self.available.push_back(number);
}
}
}