Skip to content

Commit 6fad0f1

Browse files
committed
feat: add min stack problem solution
1 parent 2a2c3da commit 6fad0f1

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

src/easy/min_stack.rs

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
#![allow(dead_code)]
2+
struct MinStack {
3+
stack: Vec<i32>,
4+
min_stack: Vec<i32>,
5+
}
6+
7+
/**
8+
* `&self` means the method takes an immutable reference.
9+
* If you need a mutable reference, change it to `&mut self` instead.
10+
*/
11+
impl MinStack {
12+
fn new() -> Self {
13+
MinStack {
14+
stack: Vec::new(),
15+
min_stack: Vec::new(),
16+
}
17+
}
18+
19+
fn push(&mut self, val: i32) {
20+
self.stack.push(val);
21+
if self.min_stack.is_empty() || val <= self.min_stack[self.min_stack.len() - 1] {
22+
self.min_stack.push(val);
23+
}
24+
}
25+
26+
fn pop(&mut self) {
27+
let val = self.stack.pop().unwrap();
28+
if val == self.min_stack[self.min_stack.len() - 1] {
29+
self.min_stack.pop();
30+
}
31+
}
32+
33+
fn top(&self) -> i32 {
34+
self.stack[self.stack.len() - 1]
35+
}
36+
37+
fn get_min(&self) -> i32 {
38+
self.min_stack[self.min_stack.len() - 1]
39+
}
40+
}
41+
42+
#[cfg(test)]
43+
mod tests {
44+
use super::*;
45+
46+
#[test]
47+
fn test_155() {
48+
let mut obj = MinStack::new();
49+
obj.push(-2);
50+
obj.push(0);
51+
obj.push(-3);
52+
assert_eq!(obj.get_min(), -3);
53+
obj.pop();
54+
assert_eq!(obj.top(), 0);
55+
assert_eq!(obj.get_min(), -2);
56+
}
57+
58+
#[test]
59+
fn test_155_2() {
60+
let mut obj = MinStack::new();
61+
obj.push(0);
62+
obj.push(1);
63+
obj.push(0);
64+
assert_eq!(obj.get_min(), 0);
65+
obj.pop();
66+
assert_eq!(obj.get_min(), 0);
67+
}
68+
}

0 commit comments

Comments
 (0)