包含min函数的栈

https://ac.nowcoder.com/acm/problem/3707

题目描述

设计一个支持push,pop,top等操作并且可以在O(1)时间内检索出最小元素的堆栈。

  • push(x)–将元素x插入栈中
  • pop()–移除栈顶元素
  • top()–得到栈顶元素
  • getMin()–得到栈中最小元素

样例

MinStack minStack = new MinStack();
minStack.push(-1);
minStack.push(3);
minStack.push(-4);
minStack.getMin();   --> Returns -4.
minStack.pop();
minStack.top();      --> Returns 3.
minStack.getMin();   --> Returns -1.

算法1

(双栈)

我们定义两个栈,一个是正常的栈stk1,另一个是stk2,stk2的栈顶表示当前stk1从栈顶到栈底元素中的最小值

正常的push pop get_top操作由stk1完成

get_min由stk2完成

如何维护stk2

每次进行push操作时,将新加入的元素x与stk2栈顶元素进行比较如果x更小则在stk2中push一个x,否则push一个stk2的栈顶元素

pop操作stk1和stk2同时进行

(实际操作的时候只需要将小于等于stk2.top()的元素push到stk2。如果当前pop的元素和stk2.top()元素相同则stk2.pop()

时间复杂度

C++ 代码

class Solution {
public:
    stack<int> stk1;
    stack<int> stk2;
    Solution() {

    }
    void push(int value) {
        stk1.push(value);
        if(stk2.empty() || stk2.top() >= value)
            stk2.push(value);
    }
    void pop() {
        if(stk2.top() == stk1.top()) stk2.pop();
        stk1.pop();
    }
    int top() {
        return stk1.top();
    }
    int min() {
        return stk2.top();
    }
};

墙裂推荐lyd大佬的书!!!!一起来交流学习这本书吧!!!!

全部评论

相关推荐

06-25 21:00
门头沟学院 Java
多拆解背记一下当前的高频场景面试题,结合自己的项目经历去作答,面试通过率原来真的不会低!
牛客96559368...:小公司不就是这样的吗,面试要么是点击就送,要么就是往死里拷打,没有一个统一的标准。这个不能代表所有公司
点赞 评论 收藏
分享
Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务