30.包含min函數的棧
class Solution {
public:
vector<int> vec;
int min_val=INT_MAX,min_cnt=0;
void push(int value) {
vec.push_back(value);
if(min_cnt==0){
min_val=value,min_cnt=1;
}
else if(min_val>value){
min_val=value,min_cnt=1;
}
}
void pop() {
int val=vec.back();
vec.pop_back();
if(min_val==val){
min_cnt--;
}
if(min_cnt==0){
min_val=INT_MAX;
for(const int& x:vec){
if(min_val>x){
min_val=x,min_cnt=1;
}
else if(min_val==x){
min_cnt++;
}
}
}
}
int top() {
return vec.back();
}
int min() {
return min_val;
}
};
31.棧的壓入、彈出序列
class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
int index = 0;
for(int i = 0; i < pushV.size(); ++i){
s.push(pushV[i]);
while(!s.empty() && popV[index] == s.top()){
s.pop();
index++;
}
}
return s.empty();
}
private:
stack<int> s;
};