题目:给一个栈的push和pop的序列,让你判断这个pop的序列是否是符合规则的(元素都不相等),符合规则返回true,不符合返回false。
public boolean validateStackSequences(int[] pushed, int[] popped)
思路: 思路不完全清楚别去写代码(否则就是在浪费时间)。一定要先把思路固定再说其他,固定不下来就花更多的精力去固定,直到固定下来。
核心就是先push,再去判断。为什么?
- 因为给你push序列,你就只能先去push,然后在过程中去拿stack.peek()和pop序列比较,来看看pop序列符合不符合规则(最后stack.pop为empty就符合规则)。
- 只能这样验证,很自然。
- 注意:判断不只一次,所以用while。
/*
思路先确定。思路:先push,然后再判断。首先应该是这个。
*/
public boolean validateStackSequences(int[] pushed, int[] popped) {
//当pushed和popped都没有元素时,也返回true
Stack<Integer> stack = new Stack<>();
int x = 0;
for (int item : pushed) {
//不论怎样,先把元素push进去
stack.push(item);
//当栈顶元素等于popped对应元素时stack.pop(),可能一下子pop多个,所以用while
while(!stack.isEmpty() && stack.peek() == popped[x]){
stack.pop();
x++;
}
}
//看看最后stack是否为空empty
return stack.isEmpty();
}