题目来源:https://leetcode.com/contest/weekly-contest-112/problems/validate-stack-sequences/
问题描述
946. Validate Stack Sequences
Given two sequences pushed
and popped
with distinct values, return true
if and only if this could have been the result of a sequence of push and pop operations on an initially empty stack.
Example 1:
Input: pushed = [1,2,3,4,5], popped = [4,5,3,2,1]
Output: true
Explanation: We might do the following sequence:
push(1), push(2), push(3), push(4), pop() -> 4,
push(5), pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1
Example 2:
Input: pushed = [1,2,3,4,5], popped = [4,3,5,1,2]
Output: false
Explanation: 1 cannot be popped before 2.
Note:
0 <= pushed.length == popped.length <= 1000
0 <= pushed[i], popped[i] < 1000
pushed
is a permutation ofpopped
.pushed
andpopped
have distinct values.
------------------------------------------------------------
题意
给定两个数列pushed和popped,判断pushed和popped是否可以按顺序模拟入栈出栈过程。
------------------------------------------------------------
思路
用栈模拟操作。每次入栈一个pushed的一个数后尽量多的出栈,如果最后栈空,则返回true
------------------------------------------------------------
代码
class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
int i = 0, j = 0, k = -1, n = pushed.size();
vector<int> st;
while (i < n)
{
st.push_back(pushed[i++]);
k++;
while (j < n && k >= 0)
{
if (st[k] == popped[j])
{
st.pop_back();
k--;
j++;
}
else
{
break;
}
}
}
return (k == -1);
}
};