要怎麼知道stack當前元素內的「最小值」?
每次push時, 若當前element比minVal更小
則先把min給push進去, 再push當前element, 並且更新minVal
超有趣, 一次push兩個element進去!!
pop時還可以用這個多push進去的「次小值」還原成「最小值」
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 | class MinStack {
private:
std::stack<int> _stack;
int minVal;
public:
MinStack() { minVal = INT_MAX; }
void push(int x) {
if (x <= minVal) {
_stack.push(minVal);
minVal = x;
}
_stack.push(x);
}
void pop() {
int topVal = _stack.top();
_stack.pop();
if (topVal == minVal) {
minVal = _stack.top();
_stack.pop();
}
}
int top() { return _stack.top(); }
int getMin() { return minVal; }
};
/**
* Your MinStack object will be instantiated and called as such:
* MinStack* obj = new MinStack();
* obj->push(val);
* obj->pop();
* int param_3 = obj->top();
* int param_4 = obj->getMin();
*/
|