剑指 Offer 31. 栈的压入、弹出序列
之前学校期末考试考过这个判断题,当时是会判断的,但是转化成代码大致思路是知道的但是具体细节考虑不清楚,还是看了评论大佬的解答,感觉自己确实需要多刷题啊,。
解决思路:
1.根据这道题所属的分类,使用栈实现的,所以需要一个临时放数组的栈结构,需要的其他变量:以输入数组为循环的下标变量,设置输出数组的下标变量,初始为0。
2.如果栈是空的,或者栈顶元素不等于输入数组的当前元素,则从输入数组将该元素入栈。
3.如果栈不空并且栈顶元素等于当前输出数组的元素,则输出数组向后移动逐次判断,当前元素是不是等于栈顶元素。
4.直到不符合条件,如果此时栈元素是空的那么该序列就是正确的。
class Solution {
public boolean validateStackSequences(int[] pushed, int[] popped) {
Stack<Integer> mystack = new Stack<>();
int popindex=0;
for(int i=0;i<pushed.length;i++){
//栈空或者栈顶元素和输出数组的当前元素值不相等,元素入栈
if(mystack.isEmpty()||mystack.peek()!=popped[popindex])
{mystack.push(pushed[i]);}
//栈不空 并且栈顶元素和输出数组的当前元素值相等,栈顶元素出栈,输出数组向后移动
while(!mystack.isEmpty()&&mystack.peek()==popped[popindex]){
mystack.pop();
popindex++;
}
}
//栈空则为正确的输出,栈不空则不是
return mystack.isEmpty();
}
}
这道题回头二刷,主要是实现起来好像没有想思路容易。