LeetCode No.155 Min Stack
来源:互联网 发布:奥兰多 知乎 编辑:程序博客网 时间:2024/05/22 10:47
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
- push(x) -- Push element x onto stack.
- pop() -- Removes the element on top of the stack.
- top() -- Get the top element.
- getMin() -- Retrieve the minimum element in the stack.
Example:
MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.getMin(); --> Returns -3.minStack.pop();minStack.top(); --> Returns 0.minStack.getMin(); --> Returns -2.
===================================================================
题目链接:https://leetcode.com/problems/min-stack/
题目大意:在普通栈的基础上增加一个getMin()的操作,得到栈中最小的元素。
思路:
1、用两个stack来维护这个结构。1个stack用来正常进行stack的push pop等操作。另外1个stack用来维护min。每次对stack进行pop或者push时,也对min_stack进行相应操作。
2、第2个stack的大小是可以进行优化的。保证每次入栈比当前min小或者相等的值就可以了。pop的时候,比较待pop元素和min_stack的top的大小。如果待pop元素和min_stack top相等,则将min stack进行pop。
算法分析:所有操作都是在常数时间完成的,算法时间复杂度为O(1)。
参考代码:
class MinStack {public: /** initialize your data structure here. */ MinStack() { st.clear() ; minst.clear() ; } void push(int x) { st.push_back ( x ) ; if ( minst.empty() || x <= minst.back() ) minst.push_back ( x ) ; } void pop() { if ( st.back() == minst.back() ) minst.pop_back() ; st.pop_back() ; } int top() { return st.back() ; } int getMin() { return minst.back() ; }private: vector <int> st ; vector <int> minst ;};/** * Your MinStack object will be instantiated and called as such: * MinStack obj = new MinStack(); * obj.push(x); * obj.pop(); * int param_3 = obj.top(); * int param_4 = obj.getMin(); */
0 0
- Leetcode NO.155 Min Stack
- LeetCode No.155 Min Stack
- LeetCode(155) Min Stack
- [leetcode 155] Min Stack
- leetCode #155 Min Stack
- LeetCode[155]Min Stack
- leetcode-155 Min Stack
- leetcode 155 Min Stack
- LeetCode[155]-Min Stack
- leetcode 155:Min Stack
- LeetCode---(155)Min Stack
- leetcode-155-Min Stack
- leetcode 155: Min Stack
- [leetcode] #155 Min Stack
- LeetCode 155 Min Stack
- 【LEETCODE】155-Min Stack
- LeetCode 155:Min Stack
- [leetcode 155] Min Stack
- HTML与XHTML —— 二者有什么区别
- OpenGL程序:实例练习
- cd 到文件夹下快捷方式
- 判断数据的是否为空
- Android Studio 插件整理
- LeetCode No.155 Min Stack
- 理解Java中的ThreadLocal
- pullToRefresh
- Oracle存储过程in、out、in out 模式参数
- java中 obj=null对垃圾回收有用吗
- 纯福利 | 前端新人面试题汇总-基础篇
- Xcode8编译包在iOS8中运行异常闪退问题
- Mac Mysql忘记密码
- 【微信小程序教程】点击按钮修改文字大小