週三第八題  棧的壓入、彈出序列 - Java

 AcWing打卡活動

《劍指Offer》打卡活動 

週三第八題  棧的壓入、彈出序列

/**
 * 思路
 * 使用一個棧(stackV)依次壓入pushV數組的值
 * 使用一個變量j記錄彈出順序
 * 在壓入的過程中,如果該棧(stackV)的第一個元素等於popV[j],則彈出來(碰到之後必須彈出,不然後面將會沒有機會彈出)
 * 計數器加一
 * 如果popV中的元素彈完,則表示符合
 * 
 * 
 */
class Solution {
    public boolean isPopOrder(int [] pushV,int [] popV) {
        // 參數校驗 
        if(pushV.length <= 0 || popV.length <= 0 || pushV.length != popV.length) {
            return pushV.length <= 0 && popV.length <= 0;
        }

        Stack<Integer> stackV = new Stack();
        int j = 0; // popV計數器
        for(int i = 0; i < pushV.length; i++) {
            stackV.push(pushV[i]);
            // 如果值相等則準備彈出
            while(!stackV.empty() && stackV.peek() == popV[j]) {
                j++;
                stackV.pop();
                // popV中的元素彈完,符合彈出序列
                if(j == popV.length) {
                    return true;
                } 
            }
        }
        return false;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章