劍指offer之面試題22 棧的壓入 彈出序列

2021-07-11 10:43:55 字數 1334 閱讀 5916

題目描述

輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。

思路:這是道很抽象的題,根據題目所給的例子驗算一遍。4,5,3,2,1第乙個出棧的4必須先入棧且在棧頂,入棧順序按照序列1,2,3,4,5,此時棧中元素為1,2,3,4,4出棧。第二個出棧的是5,同樣5不在棧頂,必須先入棧,將4之後的元素入棧直到5,5入棧,位於棧頂,然後出棧5。以此類推,…,用**形式展現

步驟操作

棧彈出數字

步驟操作

棧彈出數字

1壓入116

壓入51,2,3,5

2壓入2

1,27

彈出1,2,353

壓入31,2,38彈出

1,23

4壓入4

1,2,3,49彈出

125彈出

1,2,3,4410

彈出1同理分析4,3,5,1,2

步驟操作

棧彈出數字

步驟操作

棧彈出數字

1壓入116

彈出1,232

壓入21,2

7壓入5

1,2,5

3壓入3

1,2,38彈出

1,25

4壓入4

1,2,3,495

彈出1,2,3,4410

第9步彈出的1,但1不在棧頂,將1以後的元素壓入棧,但序列中的元素已全部入棧,操作無法繼續。

總結一下:如果彈出序列下乙個數就是棧頂元素,直接彈出,如果不在棧頂,則按壓入序列壓入沒有壓入的數,直到棧頂元素是要彈出元素為止,如果所有數字都壓入了,還沒找到下乙個彈出元素,則該序列不是彈出序列。

據此可寫出**:

public

static boolean ispoporder(int pusha,int popa)

if(s.peek()!=popa[nextpop])

break;

s.pop();

nextpop++;

}if(s.isempty()&&(nextpop==popa.length))

return

false;

}public

static

void

main(string args);

int popa=;

system.out.println(ispoporder(pusha,popa));

}

劍指offer之面試題9 4 矩形覆蓋

題目描述 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?思路 用數學歸納的思想分析,得出規律。牛客網提交 public class solution if target 2 return init target int...

劍指offer 面試題22 棧的壓入 彈出序列

題目 輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設入棧的所有數字均不相等。思路 用乙個棧來模擬入棧過程。如果彈出序列的元素a不等於棧頂,那麼說明它還沒有入棧,從壓入順序裡將元素a以及它之前的元素全部入棧。如果所有壓入順序中的元素都已入棧還是沒有在棧頂找到元...

劍指Offer 面試題22 棧的壓入 彈出序列

題面 劍指offer p134 牛客網 輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序...