思路:利用pushed数组作为栈来使用,在未弹出的值后一位作为栈顶
妙
class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
int i = 0, j = 0;
for (int e : pushed) { //是按地址来进行元素赋值,每次循环后地址+1
pushed[i] = e; //巧妙的地方,这个赋值不会影响e元素的赋值循环,因为i永远不在e后面
while (i >= 0 && pushed[i] == popped[j]) { // 去掉入栈出栈情况
j++;
i--;
}
i++; //e一定往后走一位,而i有两种可能:原地,往后走一位
}
return i == 0;
}
};
注释为个人理解添加,代码有部分修改
代码来源:一个肥仔