- 算法
正常直接用栈模拟就好,我用了HashSet+栈,比较复杂。 - 核心思想
常规方法是面对即将要出站的数字,如果是栈顶数字直接pop,如果不是就接着往里进。我的方法多考虑了我如何确定当前数字是否已经进栈。 - 代码
class Solution {
public boolean validateStackSequences(int[] pushed, int[] popped) {
HashSet<Integer> map = new HashSet<Integer>();
Stack<Integer> st = new Stack<Integer>();
int j = 0;
for(int i = 0;i < pushed.length;i++){
if(i == 0) {
map.add(pushed[i]);
st.push(pushed[i]);
continue;
}
if(!map.contains(popped[j])){
map.add(pushed[i]);
st.push(pushed[i]);
}else{
if(st.peek() != popped[j]) return false;
else {
System.out.println(st.peek());
st.pop();
j++;
i--;
}
}
}
for(;j < popped.length;j++){
if(st.peek() != popped[j]) return false;
else{
System.out.println(st.peek());
st.pop();
}
}
return true;
}
}
|