Skip to content

Commit 8cbac15

Browse files
committedMay 15, 2021
feat: update solutions to lc problem: No.0155. Min Stack
1 parent 18a77e9 commit 8cbac15

File tree

6 files changed

+280
-116
lines changed

6 files changed

+280
-116
lines changed
 

‎solution/0100-0199/0155.Min Stack/README.md

+113-20
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,10 @@ minStack.getMin(); --> 返回 -2.
4545
<li><code>pop</code>、<code>top</code> 和 <code>getMin</code> 操作总是在 <strong>非空栈</strong> 上调用。</li>
4646
</ul>
4747

48-
4948
## 解法
5049

50+
“辅助栈”实现。
51+
5152
<!-- 这里可写通用的实现逻辑 -->
5253

5354
<!-- tabs:start -->
@@ -64,28 +65,26 @@ class MinStack:
6465
initialize your data structure here.
6566
"""
6667
self.s = []
67-
self.helper = []
68-
68+
self.mins = [float('inf')]
6969

70-
def push(self, x: int) -> None:
71-
self.s.append(x)
72-
element = x if not self.helper or x < self.helper[-1] else self.helper[-1]
73-
self.helper.append(element)
70+
def push(self, val: int) -> None:
71+
self.s.append(val)
72+
self.mins.append(min(self.mins[-1], val))
7473

7574
def pop(self) -> None:
7675
self.s.pop()
77-
self.helper.pop()
76+
self.mins.pop()
7877

7978
def top(self) -> int:
8079
return self.s[-1]
8180

8281
def getMin(self) -> int:
83-
return self.helper[-1]
82+
return self.mins[-1]
8483

8584

8685
# Your MinStack object will be instantiated and called as such:
8786
# obj = MinStack()
88-
# obj.push(x)
87+
# obj.push(val)
8988
# obj.pop()
9089
# param_3 = obj.top()
9190
# param_4 = obj.getMin()
@@ -97,46 +96,140 @@ class MinStack:
9796

9897
```java
9998
class MinStack {
100-
10199
private Deque<Integer> s;
102-
private Deque<Integer> helper;
100+
private Deque<Integer> mins;
103101

104102
/** initialize your data structure here. */
105103
public MinStack() {
106104
s = new ArrayDeque<>();
107-
helper = new ArrayDeque<>();
105+
mins = new ArrayDeque<>();
106+
mins.push(Integer.MAX_VALUE);
108107
}
109108

110-
public void push(int x) {
111-
s.push(x);
112-
int element = helper.isEmpty() || x < helper.peek() ? x : helper.peek();
113-
helper.push(element);
109+
public void push(int val) {
110+
s.push(val);
111+
mins.push(Math.min(mins.peek(), val));
114112
}
115113

116114
public void pop() {
117115
s.pop();
118-
helper.pop();
116+
mins.pop();
119117
}
120118

121119
public int top() {
122120
return s.peek();
123121
}
124122

125123
public int getMin() {
126-
return helper.peek();
124+
return mins.peek();
127125
}
128126
}
129127

130128
/**
131129
* Your MinStack object will be instantiated and called as such:
132130
* MinStack obj = new MinStack();
133-
* obj.push(x);
131+
* obj.push(val);
134132
* obj.pop();
135133
* int param_3 = obj.top();
136134
* int param_4 = obj.getMin();
137135
*/
138136
```
139137

138+
### **C++**
139+
140+
```cpp
141+
class MinStack {
142+
private:
143+
stack<int> s;
144+
stack<int> mins;
145+
146+
public:
147+
/** initialize your data structure here. */
148+
MinStack() {
149+
mins.push(INT_MAX);
150+
}
151+
152+
void push(int val) {
153+
s.push(val);
154+
mins.push(min(mins.top(), val));
155+
}
156+
157+
void pop() {
158+
s.pop();
159+
mins.pop();
160+
}
161+
162+
int top() {
163+
return s.top();
164+
}
165+
166+
int getMin() {
167+
return mins.top();
168+
}
169+
};
170+
171+
/**
172+
* Your MinStack object will be instantiated and called as such:
173+
* MinStack* obj = new MinStack();
174+
* obj->push(val);
175+
* obj->pop();
176+
* int param_3 = obj->top();
177+
* int param_4 = obj->getMin();
178+
*/
179+
```
180+
181+
### **JavaScript**
182+
183+
```js
184+
/**
185+
* initialize your data structure here.
186+
*/
187+
var MinStack = function() {
188+
this.s = [];
189+
this.mins = [Infinity];
190+
};
191+
192+
/**
193+
* @param {number} val
194+
* @return {void}
195+
*/
196+
MinStack.prototype.push = function(val) {
197+
this.s.push(val);
198+
this.mins.push(Math.min(this.mins[this.mins.length - 1], val));
199+
};
200+
201+
/**
202+
* @return {void}
203+
*/
204+
MinStack.prototype.pop = function() {
205+
this.s.pop();
206+
this.mins.pop();
207+
};
208+
209+
/**
210+
* @return {number}
211+
*/
212+
MinStack.prototype.top = function() {
213+
return this.s[this.s.length - 1];
214+
};
215+
216+
/**
217+
* @return {number}
218+
*/
219+
MinStack.prototype.getMin = function() {
220+
return this.mins[this.mins.length - 1];
221+
};
222+
223+
/**
224+
* Your MinStack object will be instantiated and called as such:
225+
* var obj = new MinStack()
226+
* obj.push(val)
227+
* obj.pop()
228+
* var param_3 = obj.top()
229+
* var param_4 = obj.getMin()
230+
*/
231+
```
232+
140233
### **...**
141234

142235
```

‎solution/0100-0199/0155.Min Stack/README_EN.md

+111-20
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ minStack.getMin(); // return -2
4747
<li>At most <code>3 * 10<sup>4</sup></code> calls will be made to <code>push</code>, <code>pop</code>, <code>top</code>, and <code>getMin</code>.</li>
4848
</ul>
4949

50-
5150
## Solutions
5251

5352
<!-- tabs:start -->
@@ -62,28 +61,26 @@ class MinStack:
6261
initialize your data structure here.
6362
"""
6463
self.s = []
65-
self.helper = []
66-
64+
self.mins = [float('inf')]
6765

68-
def push(self, x: int) -> None:
69-
self.s.append(x)
70-
element = x if not self.helper or x < self.helper[-1] else self.helper[-1]
71-
self.helper.append(element)
66+
def push(self, val: int) -> None:
67+
self.s.append(val)
68+
self.mins.append(min(self.mins[-1], val))
7269

7370
def pop(self) -> None:
7471
self.s.pop()
75-
self.helper.pop()
72+
self.mins.pop()
7673

7774
def top(self) -> int:
7875
return self.s[-1]
7976

8077
def getMin(self) -> int:
81-
return self.helper[-1]
78+
return self.mins[-1]
8279

8380

8481
# Your MinStack object will be instantiated and called as such:
8582
# obj = MinStack()
86-
# obj.push(x)
83+
# obj.push(val)
8784
# obj.pop()
8885
# param_3 = obj.top()
8986
# param_4 = obj.getMin()
@@ -93,46 +90,140 @@ class MinStack:
9390

9491
```java
9592
class MinStack {
96-
9793
private Deque<Integer> s;
98-
private Deque<Integer> helper;
94+
private Deque<Integer> mins;
9995

10096
/** initialize your data structure here. */
10197
public MinStack() {
10298
s = new ArrayDeque<>();
103-
helper = new ArrayDeque<>();
99+
mins = new ArrayDeque<>();
100+
mins.push(Integer.MAX_VALUE);
104101
}
105102

106-
public void push(int x) {
107-
s.push(x);
108-
int element = helper.isEmpty() || x < helper.peek() ? x : helper.peek();
109-
helper.push(element);
103+
public void push(int val) {
104+
s.push(val);
105+
mins.push(Math.min(mins.peek(), val));
110106
}
111107

112108
public void pop() {
113109
s.pop();
114-
helper.pop();
110+
mins.pop();
115111
}
116112

117113
public int top() {
118114
return s.peek();
119115
}
120116

121117
public int getMin() {
122-
return helper.peek();
118+
return mins.peek();
123119
}
124120
}
125121

126122
/**
127123
* Your MinStack object will be instantiated and called as such:
128124
* MinStack obj = new MinStack();
129-
* obj.push(x);
125+
* obj.push(val);
130126
* obj.pop();
131127
* int param_3 = obj.top();
132128
* int param_4 = obj.getMin();
133129
*/
134130
```
135131

132+
### **C++**
133+
134+
```cpp
135+
class MinStack {
136+
private:
137+
stack<int> s;
138+
stack<int> mins;
139+
140+
public:
141+
/** initialize your data structure here. */
142+
MinStack() {
143+
mins.push(INT_MAX);
144+
}
145+
146+
void push(int val) {
147+
s.push(val);
148+
mins.push(min(mins.top(), val));
149+
}
150+
151+
void pop() {
152+
s.pop();
153+
mins.pop();
154+
}
155+
156+
int top() {
157+
return s.top();
158+
}
159+
160+
int getMin() {
161+
return mins.top();
162+
}
163+
};
164+
165+
/**
166+
* Your MinStack object will be instantiated and called as such:
167+
* MinStack* obj = new MinStack();
168+
* obj->push(val);
169+
* obj->pop();
170+
* int param_3 = obj->top();
171+
* int param_4 = obj->getMin();
172+
*/
173+
```
174+
175+
### **JavaScript**
176+
177+
```js
178+
/**
179+
* initialize your data structure here.
180+
*/
181+
var MinStack = function() {
182+
this.s = [];
183+
this.mins = [Infinity];
184+
};
185+
186+
/**
187+
* @param {number} val
188+
* @return {void}
189+
*/
190+
MinStack.prototype.push = function(val) {
191+
this.s.push(val);
192+
this.mins.push(Math.min(this.mins[this.mins.length - 1], val));
193+
};
194+
195+
/**
196+
* @return {void}
197+
*/
198+
MinStack.prototype.pop = function() {
199+
this.s.pop();
200+
this.mins.pop();
201+
};
202+
203+
/**
204+
* @return {number}
205+
*/
206+
MinStack.prototype.top = function() {
207+
return this.s[this.s.length - 1];
208+
};
209+
210+
/**
211+
* @return {number}
212+
*/
213+
MinStack.prototype.getMin = function() {
214+
return this.mins[this.mins.length - 1];
215+
};
216+
217+
/**
218+
* Your MinStack object will be instantiated and called as such:
219+
* var obj = new MinStack()
220+
* obj.push(val)
221+
* obj.pop()
222+
* var param_3 = obj.top()
223+
* var param_4 = obj.getMin()
224+
*/
225+
```
226+
136227
### **...**
137228

138229
```

0 commit comments

Comments
 (0)