包含min函数的栈

包含min函数的栈

https://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49?tpId=295&tqId=23268&ru=/exam/oj&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2Foj

包含min函数的栈

思路:(双栈法)

1.由于对于pop()、top()、push()操作,直接用现有的stack中的这些操作就行,因为时间复杂度是O(1)

2.但是对于stack中现有的min函数,时间复杂度不是O(1)

3.所以可以通过另一个栈进行辅助记录栈1中的最小值,则栈2的栈顶元素就是栈1中的最小值

4.每次将插入栈1的元素与栈2的栈顶元素大小进行比较,将如果新的值小,就将该值压入栈2,否则就把栈2的栈顶元素本身压入栈中

代码:

class Solution {
public:
//想在栈原先的结构中增加求min的函数,又要求时间复杂度是O(1)
//对于pop()、top()、push()操作中本生的stack的这些操作的时间的复杂度就是O(1),所以可以直接调用
//但是需要另一个栈来保留栈中的最小的元素
//则每次插入的时候,就将插入栈1的元素与栈2的栈顶元素进行大小比较
//如果发现当前的值比栈2的栈顶的值小,就将该值也压入栈2,即更新栈2的栈顶元素为当前栈1中的最小值
//否则就表示当前栈2的栈顶元素还是最小值,就直接将栈2的栈顶元素再一次插入栈2
//则栈2的栈顶的元素就是栈1中min
    stack<int>s1;
    stack<int>s2;
    void push(int value) {
        s1.push(value);
        if(s2.empty()||s2.top()>value){
            s2.push(value);
        }else{
            s2.push(s2.top());
        }
    }
    void pop() {
        s1.pop();
        s2.pop();
    }
    int top() {
        return s1.top();
    }
    int min() {
        return s2.top();
    }
};
全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 15:43
点赞 评论 收藏
分享
Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务