2023-08-06力扣今日二题

链接:

剑指 Offer 09. 用两个栈实现队列

题意:

如题

解:

第一个栈逆序栈,存储插入顺序,另一个栈正序栈负责弹出数据

优化思想:只有当st2正序栈为空时才将st1逆序栈的转移过来(若st2不为空则会导致st1转移的数据叠在st2已有数据上方,我就不写了)

实际代码:

#include
using namespace std;
class CQueue {
public:
    stackst1,st2;//st1 逆序 st2 正序 
    CQueue() = default;
    //默认构造 
    void appendTail(int value)
    {
        st2Tost1();
        st1.push(value); 
    }
    //添加数值 
    int deleteHead()
    {
        st1Tost2();
        if(st2.empty()) return -1;
        else
        {
            int ret=st2.top();
            st2.pop();
            return ret;
        }
    }
    //移除数值
private:
    void st1Tost2()
    {
        while(!st1.empty())
        {
            st2.push(st1.top());
            st1.pop();
        }
    }
    void st2Tost1()
    {
        while(!st2.empty())
        {
            st1.push(st2.top());
            st2.pop();
        }
    }
};
int main()
{
    
}

限制:

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

你可能感兴趣的:(力扣每日一题,leetcode,数据结构,c++)