ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

剑指offer#30

2022-01-16 11:35:55  阅读:252  来源: 互联网

标签:offer int top 30 pop stack2 empty stack1


题目如下


这道题要求min(),push(),pop()的时间复杂度都是O(1),只用一个栈是实现不了的,为什么?栈的最明显的特点就是:最后进去的元素最新出来。用一个栈的话,每次都要确保最小的元素在栈顶,但最后进栈的元素不保证都是最小的,所以用一个栈就实现不了。本题要求的时间复杂度的最优,那可以用空间换时间的思想,借助一个辅助栈来实现它。

class MinStack {
public:
    /** initialize your data structure here. */
    stack<int>stack1;//第一次报错是因为我把s写成大写的了
    stack<int>stack2;
    int back1;
    int back2;
    MinStack() {
        while (!stack1.empty())
            stack1.pop();
        while (!stack2.empty())
            stack2.pop();
    }
    
    void push(int x) {
        stack1.push(x);
        if (stack2.size() == 0 || stack2.top() > x)
            stack2.push(x);
        else
            stack2.push(stack2.top());//如果新入栈的元素没有比辅助栈的栈顶元素小,就把辅助栈的栈顶元素再次压进辅助栈中去,确保数据栈中的元素数量和辅助栈中的元素数量保持一致
    }
    
    void pop() {
        if (!stack1.empty() && !stack2.empty())
        {
            stack1.pop();
            stack2.pop();
        }
       
    }
    
    int top() {
        if (!stack1.empty())
        {
            back1 = stack1.top();
        }
        return back1;
    }
    
    int min() {
        if (!stack2.empty())
        {
            back2 = stack2.top();
        }
        return back2;
    }
};

/**
 * 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->min();
 */

这题是我今日待办事项的第一件事(其实是开始刷剑指第一天的题目,今天是第三天,昨天没有写),我就是严格按照视频里说的,先开始再说,每次做一点,而且要在多巴胺充足的时候做,没有拖泥带水,我一上来就是先看剑指这书(图书馆的)的解释,然后看看吴师兄的解析(也没啥的),然后就开始写了,没有很痛苦,我也不想去看吴师兄的题解,因为他是用java写的(又在乎语言了。。。),C++yyds.

标签:offer,int,top,30,pop,stack2,empty,stack1
来源: https://www.cnblogs.com/sixiaoxiaoya/p/15808979.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有