21、棧的壓入、彈出序列

題目描述
輸入兩個整數(shù)序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數(shù)字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個序列的長度是相等的)

這題如果知道思路的話挺簡單的,但是第一次做忽略了棧為空的情況,不處理會拋出異常,這一點跟Queue不一樣,Queue如果為空,peek函數(shù)會返回null。

import java.util.*;

public class Solution {
    public boolean IsPopOrder(int [] pushA,int [] popA) {
      Stack<Integer> stack = new Stack<>();
        int j=0;//pushA的索引
        //逐個判斷popA的元素是不是彈出元素
        for(int i=0; i<popA.length; i++){
            //如果棧為空
            if(stack.isEmpty()){
                if(j<pushA.length){
                    stack.push(pushA[j]);
                    j++;
                }else{
                    return false;
                }
                
            }
            
            //棧頂元素不是彈出元素,就繼續(xù)入棧
            while(stack.peek()!=popA[i]){
                if(j<pushA.length){
                    stack.push(pushA[j]);
                    j++;
                }else{//pushA的元素都已入棧,仍沒有找到popA的相應元素
                    return false;
                }
            }
            //找到元素之后彈出,以便繼續(xù)判斷下一個元素
            stack.pop();
            
        }
        return true;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容