Leetcode 棧的壓入 彈出序列

2021-10-04 14:24:44 字數 1292 閱讀 3670

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

示例 1:

輸入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]

輸出:true

解釋:我們可以按以下順序執行:

push(1), push(2), push(3), push(4), pop() -> 4,

push(5), pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1

示例 2:

輸入:pushed = [1,2,3,4,5], popped = [4,3,5,1,2]

輸出:false

解釋:1 不能在 2 之前彈出。

0 <= pushed.length == popped.length <= 1000

0 <= pushed[i], popped[i] < 1000

pushed 是 popped 的排列。

模擬入棧的操作 ;

以示例1為例, 主要的思路如下: 

第一次迴圈, stack為空, stack中壓入pushed陣列中的數值1;

第二次迴圈, stack不為空且stack棧頂數值1不等於poped陣列數值4, 而且pushed陣列還沒遍歷完, stack壓入pushed陣列中數值2;

第四次迴圈, stack不為空且stack棧頂數值4等於poped陣列數值4, stack彈出棧頂;

第五次迴圈, stack不為空且stack棧頂數值3不等於poped陣列數值5, 而且pushed陣列還沒遍歷完, stack壓入pushed陣列中數值5;

第六次迴圈, stakc不為空且stack棧頂數值5等於poped陣列數值5, stack彈出棧頂;

第n次迴圈, stack為空且pushed陣列已經遍歷完, 退出迴圈;

判斷poped陣列是否遍歷完, 如果已經遍歷完說明poped中的順序是棧的一種彈出順序

class solution 

else if(indexpush< sizepush)

else

break;

// 在push陣列和pop陣列都沒有往後推的情況下, 之後的迴圈也不會再往後推了

}// push陣列遍歷完了

return indexpop== popped.size();

}};

LeetCode 面試題31 棧的壓入 彈出序列

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

棧的壓入彈出序列

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

棧的壓入 彈出序列

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