• 剑指offer之【栈的压入、弹出序列】


    题目:

      栈的压入、弹出序列

    链接:

      https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106?tpId=13&tqId=11174&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

    题目描述:

      输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)

    思路:

      新建一个空栈,进行栈的压入、弹出模拟

      如果栈为空或者栈顶不等于弹出数字  则  压入   否则   弹出   (一直判断到 两个序列的末尾)

      最后如果栈为空  则  true   否则  false

    代码:

      

     1 class Solution {
     2 public:
     3     bool IsPopOrder(vector<int> pushV, vector<int> popV){
     4         int len = pushV.size();
     5         int pos1=0;
     6         int pos2=0;
     7         while(pos1<len ||pos2<len){
     8             if(stk.empty()||stk.top() != popV[pos2]){
     9                 stk.push(pushV[pos1++]);
    10             }
    11             else{
    12                 if(stk.empty())
    13                     return false;
    14                 stk.pop();
    15                 ++pos2;
    16             }
    17         }
    18         if(!stk.empty())
    19               return false;
    20         return true;
    21     }
    22 private:
    23     stack<int> stk;
    24 };
  • 相关阅读:
    careercup-C和C++ 13.6
    C++中名字隐藏,名字查找优先于类型检查
    careercup-C和C++ 13.5
    careercup-C和C++ 13.4
    careercup-C和C++ 13.3
    careercup-C和C++ 13.2
    careercup-C和C++
    careercup-排序和查找 11.7
    RMAN Catalog创建、配置和管理
    Linux一块网卡添加多个IP地址
  • 原文地址:https://www.cnblogs.com/wangshujing/p/6936648.html
Copyright © 2020-2023  润新知