LeetCode 1146. Snapshot Array

Problem Statement



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

struct SnapshotArray {
map : HashMap<i32, BTreeMap<i32, i32>>,
version: i32
}

/**
* `&self` means the method takes an immutable reference.
* If you need a mutable reference, change it to `&mut self` instead.
*/
impl SnapshotArray {

fn new(length: i32) -> Self {
SnapshotArray {
map: HashMap::new(),
version: 0
}
}

fn set(&mut self, index: i32, val: i32) {
self.map.entry(index).or_insert(BTreeMap::new());
self.map.get_mut(&index).unwrap().insert(self.version, val);
}

fn snap(&mut self) -> i32 {
let ret = self.version;
self.version += 1;
return ret;
}

fn get(&self, index: i32, snap_id: i32) -> i32 {
if !self.map.contains_key(&index) {
return 0;
}
let vals = self.map.get(&index).unwrap();
let mut ans = 0;
for entry in vals {
if snap_id >= *entry.0 {
ans = *entry.1;
} else {
break;
}
}
return ans;
}
}