• 栈的压入、弹出序列


    题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
     
     解题思路:如果下一个弹出的数字刚好是栈顶数字,那么直接弹出。如果下一个弹出的数字不在栈顶,我们把压栈序列中还没有入栈的数字压入辅助栈,直到把下一个需要弹出的数字压入栈顶为止。如果所有的数字都压入栈仍然没有找到下一个弹出的数字,那么该序列不可能是一个弹出序列。
     
     1 bool IsPopOrder(const int* pPush,const int* pPop,int nLength)
     2 {
     3  bool bPossible=false;
     4  if(pPush!=NULL&&pPop!=NULL&&nLength>0)
     5  {
     6   const int* pNextPush=pPush;
     7   const int* pNextPop=pPop;
     8   std::stack<int> stackData;
     9    
    10  while(pNextPop-pPop<nLength)
    11  {
    12    while(stackData.empty()||stackData.top()!=*pNextPop)
    13    {
    14        if(pNextPush-pPush==nLength)
    15        break;
    16        stackData.push(*pNextPush);
    17        pNextPush++;
    18    }
    19    if(stackData.top()!=*pNextPop)
    20    break;
    21   
    22   stackData.pop();
    23   pNextPop++;
    24 }
    25  if(stackData.empty()&&pNextpop-pPop==nLength)
    26  bPossible=true;
    27 }
    28 return bPossible;
    29 }
  • 相关阅读:
    【Leetcode】23. Merge k Sorted Lists
    【Leetcode】109. Convert Sorted List to Binary Search Tree
    【Leetcode】142.Linked List Cycle II
    【Leetcode】143. Reorder List
    【Leetcode】147. Insertion Sort List
    【Leetcode】86. Partition List
    jenkins 配置安全邮件
    python 发送安全邮件
    phpstorm 同步远程服务器代码
    phpUnit 断言
  • 原文地址:https://www.cnblogs.com/wxdjss/p/5604207.html
Copyright © 2020-2023  润新知