单调栈

单调证需要一直保证栈中元素是按序排列的。插入元素时首先检查,循环检查栈顶元素是否符合条件,不符合则弹出。不需要再将弹出元素插入回去。如果插入回去的话,其实整套程序逻辑实现就会多此一举,不如直接插入之后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;   
};
posted @ 2024-08-18 22:28  LemHou  阅读(14)  评论(0)    收藏  举报