传送门
nowcoder
leetcode
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的 min 函数,输入操作时保证 pop、top 和 min 函数操作时,栈中一定有元素。
此栈包含的方法有:
1 2 3 4
| push(value): 将value压入栈中 pop(): 弹出栈顶元素 top(): 获取栈顶元素 min(): 获取栈中最小元素
|
要求:时间复杂度为 O(1),空间复杂度为 O(n)
C++ 代码 - nowcoder
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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
class Solution { public: void push(int val) { stk.push(val); if (minStk.empty() || minStk.top() > val) { minStk.push(val); } else { minStk.push(minStk.top()); } }
void pop() { stk.pop(); minStk.pop(); } int top() { return stk.top(); }
int min() { return minStk.top(); }
private: stack<int> stk; stack<int> minStk; };
class Solution { public: void push(int val) { minNum = std::min(val, minNum); stk.push(minNum); stk.push(val); }
void pop() { stk.pop(); stk.pop(); int t = stk.top(); stk.pop(); if (minNum == stk.top()) { stk.push(t); } else { minNum = stk.top(); stk.pop(); stk.push(minNum); stk.push(t); } }
int top() { return stk.top(); }
int min() { return minNum; }
private: int minNum = INT_MAX; stack<int> stk; };
|
C++ 代码 - leetcode
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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
class MinStack { public: MinStack() {
} void push(int x) { stk.push(x); if (minStack.empty() || minStack.top() > x) { minStack.push(x); } else { minStack.push(minStack.top()); } } void pop() { stk.pop(); minStack.pop(); } int top() { return stk.top(); } int getMin() { return minStack.top(); }
private: stack<int> stk; stack<int> minStack; };
class MinStack { public: MinStack() {
} void push(int x) { stk.push(x); if (minStack.empty() || x <= minStack.top()) { minStack.push(x); } } void pop() { if (stk.top() == minStack.top()) { minStack.pop(); } stk.pop(); } int top() { return stk.top(); } int getMin() { return minStack.top(); }
private: stack<int> stk; stack<int> minStack; };
|