zoukankan      html  css  js  c++  java
  • 面试题22 栈的压入、弹出序列

    题目描述

    输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
     
     1 class Solution {
     2 public:
     3      bool IsPopOrder(vector<int> pushV, vector<int> popV) {
     4         if (pushV.size() == 0 || popV.size() == 0){
     5             return false;
     6         }
     7         stack<int> s;
     8         int i = 0, j = 0;
     9         while (i < pushV.size()) {
    10             if (pushV[i] == popV[j]) {
    11                 i++;
    12                 j++;
    13             }
    14             else {
    15                 if (s.empty()) {
    16                     s.push(pushV[i]);
    17                     i++;
    18                 }
    19                 else {
    20                     if (s.top() == popV[j]) {
    21                         s.pop();
    22                         j++;
    23                     }
    24                     else {
    25                         s.push(pushV[i]);
    26                         i++;
    27                     }
    28                 }
    29             }
    30         }
    31         while (!s.empty()) {
    32             if (s.top() != popV[j]) {
    33                 return false;
    34             }
    35             else {
    36                 s.pop();
    37                 j++;
    38             }
    39         }
    40         return true;
    41     }
    42 };
  • 相关阅读:
    AutoLayout动画
    实现毛玻璃效果
    合并静态库
    GCDAsyncSocket~
    iOS下URL编码
    OC多线程之GCD ----- 2
    堆和栈的区别
    Effective Objective-C 2.0重读笔记---2
    Android手机端抓包方法
    Android APK反编译
  • 原文地址:https://www.cnblogs.com/wanderingzj/p/5353438.html
Copyright © 2011-2022 走看看