LCR 148. 验证图书取出顺序(栈)

文章讨论了如何通过使用栈的数据结构来判断给定的图书放入顺序(putIn)和拿取顺序(takeOut)是否匹配。通过遍历putIn并模拟栈的操作,判断takeOut是否按照putIn的顺序正确拿取书籍。
摘要由CSDN通过智能技术生成

现在图书馆有一堆图书需要放入书架,并且图书馆的书架是一种特殊的数据结构,只能按照 一定 的顺序 放入 和 拿取 书籍。

给定一个表示图书放入顺序的整数序列 putIn,请判断序列 takeOut 是否为按照正确的顺序拿取书籍的操作序列。你可以假设放入书架的所有书籍编号都不相同。

示例 1:

输入:putIn = [6,7,8,9,10,11], takeOut = [9,11,10,8,7,6]
输出:true
解释:我们可以按以下操作放入并拿取书籍:
push(6), push(7), push(8), push(9), pop() -> 9,
push(10), push(11),pop() -> 11,pop() -> 10, pop() -> 8, pop() -> 7, pop() -> 6

示例 2:

输入:putIn = [6,7,8,9,10,11], takeOut = [11,9,8,10,6,7]
输出:false
解释:6 不能在 7 之前取出。

提示:

  • 0 <= putIn.length == takeOut.length <= 1000
  • 0 <= putIn[i], takeOut < 1000
  • putIn 是 takeOut 的排列。

思路: 

1、直接在原栈也就是进栈容器putIn中进行。

2、遍历进栈容器,用c记录每个整数。

3、通过表达式putIn[i]=c完成进栈操作,接着判断栈顶元素和出栈元素是否相等,相等则进行出栈操作(--i和++j)。

4、让i自增,完成进栈操作时需要的下标自增效果。

5、若全部退栈完成,i等于-1,由于完成进栈操作时需要的下标自增,最后i应该等于0,依次判断。

代码实现: 

class Solution {
public:
    bool validateBookSequences(vector<int>& putIn, vector<int>& takeOut) {
        int i = 0, j = 0;
        for(int c : putIn)
        {
            putIn[i] = c;               //进栈操作
            while(i >= 0 && putIn[i] == takeOut[j])      //出栈操作
            {
                --i;
                ++j;
            }
            ++i;                          //进栈操作中的下标递增操作
        }
        return i == 0;                    //退栈完成时i应该为-1,但上一步有一个++i操作所以应该判断是否为0
    }
};
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值