-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathsmallest-number-in-infinite-set.rs
54 lines (45 loc) · 1.14 KB
/
smallest-number-in-infinite-set.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#![allow(dead_code, unused, unused_variables, non_snake_case)]
fn main() {}
struct Solution;
struct SmallestInfiniteSet {
s: std::collections::BTreeSet<i32>,
latest: i32,
}
/**
* `&self` means the method takes an immutable reference.
* If you need a mutable reference, change it to `&mut self` instead.
*/
/**
* Your SmallestInfiniteSet object will be instantiated and called as such:
* let obj = SmallestInfiniteSet::new();
* let ret_1: i32 = obj.pop_smallest();
* obj.add_back(num);
*/
impl SmallestInfiniteSet {
fn new() -> Self {
Self {
s: std::collections::BTreeSet::new(),
latest: 1,
}
}
fn pop_smallest(&mut self) -> i32 {
if let Some(&x) = self.s.iter().next() {
if x < self.latest {
self.s.remove(&x);
return x;
}
}
self.latest += 1;
self.latest - 1
}
fn add_back(&mut self, num: i32) {
if num >= self.latest {
return;
}
if num == self.latest - 1 {
self.latest -= 1;
return;
}
self.s.insert(num);
}
}