[剑指offer]JT21---栈的压入,弹出序列(一直等到你的出现)

剑指offer第二十一题

让我们一起来看看题目

在这里插入图片描述

思路与代码

这个题目的比较有的地方比较难处理,那就是,出栈的不一定是压入完了才开始出栈。
例如: 1 2 3 4 5入栈 4 5 3 2 1出栈
我们先压入栈。遇到和出栈相同的元素的时候,就开始出栈,
1入栈
2入栈
3入栈
4入栈和出栈4相同,4出栈,3和5不同结束出栈
5入栈和出栈5相同,5出栈,3和出栈3相同
3出栈
2出栈
1出栈

这样,栈就空了,空了就说明是对了,返回true

同样的,对于
1 2 3 4 5入栈,4 3 5 1 2出栈
1入栈
2入栈
3入栈
4入栈和出栈4相同,4出栈
3和出栈3相同,3出栈
2和出栈5不同,结束出栈
5入栈和出栈5相同,5出栈
2和出栈1不同。结束出栈
入栈全部结束,栈能剩1 2不为空
所以返回false

class Solution {
    
    
public:
    bool IsPopOrder(vector<int> pushV,vector<int> popV) {
    
    
        stack<int> temp;
        int i=0,j=0,len=pushV.size();
        for(;i<len;i++){
    
    
            temp.push(pushV[i]);
            for(;!temp.empty()&&temp.top()==popV[j];j++){
    
    
                temp.pop();
            }
        }
        return temp.empty();
    }
};

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42136832/article/details/114585424
今日推荐