File tree Expand file tree Collapse file tree 1 file changed +68
-0
lines changed Expand file tree Collapse file tree 1 file changed +68
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments