单调证需要一直保证栈中元素是按序排列的。插入元素时首先检查,循环检查栈顶元素是否符合条件,不符合则弹出。不需要再将弹出元素插入回去。如果插入回去的话,其实整套程序逻辑实现就会多此一举,不如直接插入之后sort()
即可。
class MyMonoStack{
public:
// constructor
MyMonoStack(): size(0){
/* code */
}
// Push压栈
void Push(int item){
// 循环检查栈顶元素是否大于要插入元素,要注意要考虑size是否为0,如果不考虑,size为0,nums.back()将会产生一个未定义行为,导致错误。
while (size!= 0 && numsVector.back() > item){
numsVector.pop_back();
size--;
}
numsVector.push_back(item);
size++;
}
// 弹出
void Pop(){
numsVector.pop_back();
}
// 获取size
int GetSize(){
return size;
}
// 打印信息
void Print(){
for (auto item : numsVector){
std::cout << item << std::endl;
}
std::cout << "length-->" << size;
}
private:
std::vector<int> numsVector;
int size;
};
标签:numsVector,元素,back,item,int,单调,size
From: https://www.cnblogs.com/solicit/p/18366218