----------------------2020/12/28二刷------------------------------
//每次入栈一次再判断能否连续出栈
class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
stack<int> s;
int pIndex = 0;
for(int nums : pushed) {
s.push(nums);
while(!s.empty() && s.top() == popped[pIndex]) {
s.pop();
pIndex++;
}
}
return s.empty();
}
};
-----------------------------------一刷--------------------------------
题目描述
解法 模拟
模拟出栈入栈过程
法一、先入栈再连续出栈
class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
stack <int> s;
int len1 = pushed.size();
int len2 = popped.size();
for( int i = 0,j=0 ; i < len1; i++) {
s.push(pushed[i]);
while(!s.empty() && j < len2 && s.top() == popped[j]) {
s.pop();
j++;
}
}
return s.empty();
}
};
法二、
先连续入栈再判断出栈
class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
stack <int> s;
if(pushed.size() == 0) return true;
s.push(pushed[0]);
int Iindex = 1;
int Oindex = 0;
int len1 = pushed.size() - 1;
int len2 = popped.size() - 1;
while(Oindex <= len2) {
while(s.empty() || s.top() != popped[Oindex] && Iindex <= len1) {
//判断empty是因为可能栈在过程中会清空,这时候就得先入栈一个。
s.push(pushed[Iindex]);
Iindex++;
}
if(s.top() != popped[Oindex]) return false;
s.pop();
Oindex++;
}
return s.empty();
}
};
法二写得不是很好。。。但是思想是没问题的,有空回来改改
两者的时间复杂度都是O(n) 空间复杂度O(n)