【LeetCode刷題(中等程度)】946. 驗證棧序列

讀研的小狗子發表於2020-10-31

給定 pushed 和 popped 兩個序列,每個序列中的 值都不重複,只有當它們可能是在最初空棧上進行的推入 push 和彈出 pop 操作序列的結果時,返回 true;否則,返回 false 。

示例 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 的排列。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/validate-stack-sequences
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

思路:這題是經典的模擬棧混洗的過程,我們用一個棧來模擬入棧序列的出棧序列,看實際的出棧序列與題目給出的popped序列是否能對應上即可。

class Solution {
public:
    bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
        stack<int> stk;
        int j = 0;

        for(int i = 0;i < pushed.size();++i)
        {
            stk.push(pushed[i]);
            //如果輔助棧棧頂元素和popped的元素值相等
            while(!stk.empty() && stk.top() == popped[j])
            {
                stk.pop();
                ++j;//則轉向測試下一個值
            }
        }
        return stk.empty();//如果成功的話棧應該是空的
    }
};

相關文章