輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如,序列 是某棧的壓棧序列,序列 是該壓棧序列對應的乙個彈出序列,但 就不可能是該壓棧序列的彈出序列。模擬入棧的操作 ;示例 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...