#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)
* 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)
}
}