题解 | #用两个栈实现队列# 更新注释 时间复杂度是O()

用两个栈实现队列

https://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6

class Solution
{
    // 熟悉 栈和队列的概念和性质
    // 常用的操作
public:
    void push(int node) {
        
        stack1.push(node); // 就直接进入第一个栈
        
        
    }

    int pop() {
        if(!stack2.empty()) // 若第二个栈非空 就弹出 返回
        {
            int ans = stack2.top();
            stack2.pop();
            return ans;
        }
        else // 否则 先把栈1插入的 转移到栈2  这样保证了顺序反过来 变成队列的先入先出
        {
            while(!stack1.empty())
            {
                int tmp = stack1.top();

                stack2.push(tmp);
                stack1.pop();
            }

            int ans = stack2.top();

            stack2.pop();

            return ans;
            // 对于删除操作,虽然看起来是 O(n)O(n) 的时间复杂度,但是仔细考虑下每个元素只会「至多被插入和弹出 stack2 一次」,因此均摊下来每个元素被删除的时间复杂度仍为 O(1)。

        }
        
    }

private:
    stack<int> stack1;
    stack<int> stack2;
};

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-20 18:18
是不是意味着秋招就完蛋了
花不开柳成荫:如果你是Java,是的
点赞 评论 收藏
分享
05-29 22:11
门头沟学院 Java
Elastic90:抛开学历造假不谈,这公司的招聘需求也挺怪的,Java开发还要求你有图文识别、移动端开发和c++的经验,有点逆天了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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