您的位置:首页 > 职场人生

剑指offer--面试题22:栈的压入、弹出序列

2016-09-27 17:46 519 查看


题目描述

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
python实现:
# -*- coding:utf-8 -*-
class Solution:
    def IsPopOrder(self, pushV, popV):
        # write code here
        if len(pushV)==0 and len(popV)==0:
            return True
        stack = []
        i = 0
        for num in popV:
            #栈顶不等于当前要弹出的数字,就需要入栈
            while len(stack)==0 or stack[-1]!=num:
                if i==len(pushV):#所有数字都已经入栈,还没找到等于num的数
                    return False
                stack.append(pushV[i])
                i += 1
            #此时栈顶==当前要弹出的元素
            stack.pop()
        if len(stack)>0:
            return False
        return True

c++实现:
class Solution {
public:
    bool IsPopOrder(vector<int> pushV,vector<int> popV) {
        if(pushV.size()==0 && popV.size()==0)
            return true;
         
        int i=0;
        stack<int> myStack;
        for(auto num: popV){
            while(myStack.empty() || myStack.top()!=num){
                if(i==pushV.size())
                    return false;
                myStack.push(pushV[i]);
                i++;
            }
            myStack.pop();
        }
         
        if(!myStack.empty())
            return false;
        return true;
    }
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: