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;
}
}