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