Skip to main content
Back to problems
#2349
Medium Algorithms

Design a number container system

Hash Table Design Heap (Priority Queue) Ordered Set
57.1% acceptance
Jan 13, 2026
965
74
Design a number container system that can do the following: Insert or Replace a number at the given index in the system. Return the smallest index for the given number in the system. Implement the NumberContainers class: NumberContainers() Initializes the number container system. void change(int index, int number) Fills the container at index with the number. If there is already a number at that index, replace it. int find(int number) Returns the smallest index for the given number, or -1 if there is no index that is filled by number in the system.

Solution

Rust
Time O(2^n)
Space O(n)
LeetCode
solution.rs
* impl NumberContainers {

 *     fn new() -> Self {

 *     }

 *     fn change(&self, index: i32, number: i32) {

 *     }

 *     fn find(&self, number: i32) -> i32 {

 *     }
 * }
 */

/**
 * Your NumberContainers object will be instantiated and called as such:
 * let obj = NumberContainers::new();
 * obj.change(index, number);
 * let ret_2: i32 = obj.find(number);
 */

use std::collections::{HashMap, BTreeSet};

pub struct NumberContainers {
  idx_to_num: HashMap<i32, i32>,
  num_to_idxs: HashMap<i32, BTreeSet<i32>>,
}

impl NumberContainers {
  pub fn new() -> Self {
    NumberContainers {
      idx_to_num: HashMap::new(),
      num_to_idxs: HashMap::new(),
    }
  }

  pub fn change(&mut self, index: i32, number: i32) {
    if let Some(&old) = self.idx_to_num.get(&index) {
      if old == number { return; }
      self.num_to_idxs.entry(old).and_modify(|s| { s.remove(&index); });
    }
    self.idx_to_num.insert(index, number);
    self.num_to_idxs.entry(number).or_default().insert(index);
  }

  pub fn find(&self, number: i32) -> i32 {
    self.num_to_idxs.get(&number)
      .and_then(|s| s.iter().next().copied())
      .unwrap_or(-1)
  }
}