解题思路:
我们使用一个栈 stack
来模拟该操作。按照 popped 中的顺序模拟一下出栈操作,如果符合则返回 true,否则返回 false。这里用到的贪心法则是如果栈 stack的
栈顶元素stack.peek()== popped 序列中下一个要 pop 的值,则应立刻将该值 pop 出来。最后检查栈是否为空。
class Solution {
public boolean validateStackSequences(int[] pushed, int[] popped) {
Stack<Integer> stack=new Stack();
int j=0;
for(int i=0;i<pushed.length;i++){
stack.push(pushed[i]);
while(j<popped.length&&!stack.isEmpty()
&&stack.peek()==popped[j]){
stack.pop();
j++;
}
}
return stack.isEmpty();
}
}
peek 不改变栈的值(不删除栈顶的值),pop会把栈顶的值删除
此处用empty()和isEmpty()没区别
Java Stack 类
boolean empty() 测试堆栈是否为空。
Object peek( ) 查看堆栈顶部的对象,但不从堆栈中移除它
Object pop( ) 移除堆栈顶部的对象,并作为此函数的值返回该对象。
Object push(Object element) 把项压入堆栈顶部。
int search(Object element) 返回对象在堆栈中的位置,以 1 为基数。