劍指offer:棧的壓入、彈出序列

題目來(lái)源:牛客網(wǎng)

題目描述

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


針對(duì)本題,通過(guò)列舉分析,發(fā)現(xiàn)不論出棧順序如何,首次壓入棧中的元素,要么第一個(gè)出棧,要么是最后一個(gè)。其他情況都不是該棧的出棧順序。(這兩個(gè)序列的長(zhǎng)度是相等的,是下面代碼成立的前提)


import java.util.ArrayList;

public class Solution {
    public boolean IsPopOrder(int [] pushA,int [] popA) {
        if (pushA[0] == popA[0] || pushA[0] == popA[popA.length - 1]) {
            return true;
        }
        return false;
    }
}

考慮不等長(zhǎng)的情況,做法如下
創(chuàng)建ArrayList對(duì)象list,用來(lái)模擬壓棧,如果pushA的值不等于popA的值,則添加到list中。如果相等則不添加,相當(dāng)于出棧,然后遍歷list中的元素,此時(shí)應(yīng)該從后面遍歷,因?yàn)楹竺嫦喈?dāng)于棧頂,如果當(dāng)前的值等于popA的值,則刪除(remove),直到不等于為止。直到popA遍歷完畢。
如果list中元素個(gè)數(shù)大于0并且popA沒(méi)遍歷完,則說(shuō)明才出棧順序不是正確的。


import java.util.ArrayList;

public class Solution {
    public boolean IsPopOrder(int [] pushA,int [] popA) {
        if (pushA.length == 0|| popA.length == 0) {
            return false;
        }
        ArrayList<Integer> list = new ArrayList<>();
        int i = 0;
        int j = 0;
        while (i < pushA.length && j < popA.length) {
            if (pushA[i] != popA[j]) {
                list.add(pushA[i]);
            }else {
                j++;
                for (int x = list.size() - 1; x >= 0; x--) {
                    if (j != popA.length && popA[j] == list.get(x)) {
                        list.remove(x);
                        j++;
                    }else {
                        break;
                    }
                }
            }
            i++;
        }
        return list.size() != 0 && j != popA.length ? false : true;
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 劍指offer——棧的壓入、彈出序列 題目描述: 輸入兩個(gè)整數(shù)序列,第一個(gè)序列表示棧的壓入順序,請(qǐng)判斷第二個(gè)序列是...
    source201閱讀 335評(píng)論 0 0
  • 題目描述 棧的壓入、彈出序列 輸入兩個(gè)整數(shù)序列,第一個(gè)序列表示棧的壓入順序,請(qǐng)判斷第二個(gè)序列是否可能為該棧的彈出順...
    一只可愛(ài)的檸檬樹(shù)閱讀 216評(píng)論 0 0
  • 題目 輸入兩個(gè)整數(shù)序列,第一個(gè)序列表示棧的壓入順序,請(qǐng)判斷第二個(gè)序列是否為該棧的彈出順序。假設(shè)壓入棧的所有數(shù)字均不...
    Longshihua閱讀 176評(píng)論 0 1
  • 1、題目描述 輸入兩個(gè)整數(shù)序列,第一個(gè)序列表示棧的壓入順序,請(qǐng)判斷第二個(gè)序列是否可能為該棧的彈出順序。 假設(shè)壓入棧...
    七月初一_3679閱讀 156評(píng)論 0 0
  • 題目描述:輸入兩個(gè)整數(shù)序列,第一個(gè)序列表示棧的壓入順序,請(qǐng)判斷第二個(gè)序列是否可能為該棧的彈出順序。假設(shè)壓入棧的所有...
    yyming閱讀 373評(píng)論 0 0

友情鏈接更多精彩內(nèi)容