题目
题解
大佬详细题解:面试题31. 栈的压入、弹出序列(模拟,清晰图解)
思路就是、模拟加一个辅助栈。
我自己写的菜鸡代码:
class Solution {
public boolean validateStackSequences(int[] pushed, int[] popped) {
// i用于遍历pushed,j用于遍历popped
int i=0,j=0;
int n = pushed.length;
Stack<Integer> stack = new Stack<>();
while (j<n){
/*为空或者不相等的时候就向里面push*/
if (stack.empty() || stack.peek() != popped[j]){
// 当stack不为空、并且已经push完pushed数组中的元素说明popped肯定不是弹出序列
// 是弹出序列时必定stack为空时popped数组肯定已经遍历完了j必定大于或等于n,已经提前退出循环
if (i >= n){
return false;
}
stack.push(pushed[i++]);
}
if (stack.peek() == popped[j]){
stack.pop();
j++;
}
}
return true;
}
}
大佬的代码:
class Solution {
public boolean validateStackSequences(int[] pushed, int[] popped) {
Stack<Integer> stack = new Stack<>();
int i = 0;
for(int num : pushed) {
stack.push(num); // num 入栈
while(!stack.isEmpty() && stack.peek() == popped[i]) { // 循环判断与出栈
stack.pop();
i++;
}
}
return stack.isEmpty();
}
}
作者:jyd
链接:https://leetcode-cn.com/problems/zhan-de-ya-ru-dan-chu-xu-lie-lcof/solution/mian-shi-ti-31-zhan-de-ya-ru-dan-chu-xu-lie-mo-n-2/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。