1. 题⽬链接:946.验证栈序列
2. 题⽬描述:
3. 解法(栈):
算法思路:
⽤栈来模拟进出栈的流程。
⼀直让元素进栈,进栈的同时判断是否需要出栈。当所有元素模拟完毕之后,如果栈中还有元素,那 么就是⼀个⾮法的序列。否则,就是⼀个合法的序列。
C++算法代码:
class Solution
{
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped)
{
stack<int>answer; //模拟栈
int j=0;
//进栈
for(int i=0;i<pushed.size();i++)
{
answer.push(pushed[i]);
//判断
//当栈顶的元素与输出元素相同时退出栈
while(answer.size()&&answer.top()==popped[j])
{
j++;
answer.pop();
}
}
//判段退出序列的元素是否全部实现退栈
return j==popped.size();
}
};
Java算法代码:
class Solution
{
public boolean validateStackSequences(int[] pushed, int[] popped)
{
Stack<Integer> st = new Stack<>();
int i = 0, n = popped.length;
for (int x : pushed)
{
st.push(x);
while (!st.isEmpty() && st.peek() == popped[i])
{
st.pop();
i++;
}
}
return i == n;
}
}