leetcode解题系列(五)

本文是LeetCode解题系列的第五篇,涵盖了用两个栈实现队列的剑指Offer09问题,以及比较含退格的字符串问题844。在栈实现队列的问题中,通过两个栈来模拟队列的入队和出队操作。对于退格字符串比较,使用双栈或双指针方法进行解决。最后讨论了剑指Offer40的最小k个数问题,提出了排序的效率问题。
摘要由CSDN通过智能技术生成

leetcode解题系列(五)

剑指offer09:用两个栈实现队列

题目描述:
题目描述
复习一下:栈和队列都是线性表,不过是进出元素的顺序逻辑不相同;
对于栈,就像压子弹一样,先进后出;
队列是先进先出,元素从尾部进入,从头部取出元素;

比较容易想到的方法就是维护两个栈1,栈2;每当向队列存入一个数字的时候,先进栈1,若需要进行出队列操作时,就将栈1 的元素依次出栈,并按顺序入栈2,再对栈2进行常规的出栈操作,接下来又要将栈2出栈,进入栈1,进行入队列的操作。

举个例子:向空队列存入1,2,3,4这4个数字,他们在栈1中就是以4-3-2-1(顶-底)的顺序排列,这时如果执行出队列操作时,就要依次出栈1进栈2,这样4就成了栈2的底部,1成了栈2的顶部,再出栈成为输出元素,出队列成功;再将栈2中的元素返回到栈1,方便进行后续的入队列和出队列的操作。
代码如下:

class CQueue {
   
public:
    stack<int> s1;
    stack<int> s2;
    CQueue() {
   
        
    }
    
    void appendTail(int value) {
   
        s1.push(value);
    }
    
    int deleteHead() {
   
        int res;
        while(!s1.empty()){
   
            s2.push(s1.top());
            s1.pop();
        }
        if
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值