0
点赞
收藏
分享

微信扫一扫

[[EVD]] - 剑指 Offer 09. 用两个栈实现队列

迎月兮 2022-03-30 阅读 24

题目分析: [[EVD]] - 剑指 Offer 09. 用两个栈实现队列icon-default.png?t=M276https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/

简单描述:

  • 用两个栈实现一个队列,实现它的两个函数 appendTail 和 deleteHead(若队列中没有元素,deleteHead 操作返回 -1 )

限制🚫

  • 1 <= values <= 10000
  • 最多会对 appendTail、deleteHead 进行 10000 次调用

示例:

解题思路:

思路:

  • #栈
    用两个栈实现单队列,栈A负责保存appendTail()函数尾部插入数据,栈B负责将栈A数据正序化后删除来实现deleteHead()函数

效率:

  • 空间复杂度O(n)
    • appendTail() 时间复杂度O(1)
    • deleteHead() 时间复杂度O(n) 

代码:

#include <stack>
using namespace std;

class CQueue {
private:
    stack<int> tail,head;
public:
    /*双栈模拟队头和队尾*/
    CQueue() {
       
    }
    
    void appendTail(int value) {
        tail.push(value);
    }
    
    int deleteHead() {
        if(head.empty()){
            while(!tail.empty()){
                head.push(tail.top());
                tail.pop();
            }
        }
        int res = -1;
        if(!head.empty()){
            res = head.top();
            head.pop();
        }
        return res;
    }
};
举报

相关推荐

0 条评论