• leetcode


    Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.

    • push(x) -- Push element x onto stack.
    • pop() -- Removes the element on top of the stack.
    • top() -- Get the top element.

    • getMin() -- Retrieve the minimum element in the stack.
             
    class MinStack {
    public:
    	struct Node
    	{
    		int val;
    		int cntEmlem;
    		Node(int value,int count) : val(value),cntEmlem(count){}
    	};
        void push(int x) {
    		stk.push(x);
    		if(minStk.empty() || x < minStk.top().val)
    		{
    			Node n(x,1);
    			minStk.push(n);
    		}
    		else
    		{
    			Node n = minStk.top();
    			n.cntEmlem++;
    			minStk.pop();
    			minStk.push(n);
    		}
        }
    
        void pop() {
    		stk.pop();
    		Node n = minStk.top();
    		minStk.pop();
    		n.cntEmlem--;
    		if(n.cntEmlem > 0)
    		{
    			minStk.push(n);
    		}
        }
    
        int top() {
    		return stk.top();
        }
    
        int getMin() {
    		return minStk.top().val;
        }
    private:
    	std::stack<int> stk;
    	std::stack<Node> minStk;
    };

    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    区间DP中的环形DP
    hdu 5251 包围点集最小矩形 ***
    hdu 4858 水题
    hdu 3530 单调队列 **
    hdu 3338 最大流 ****
    hdu 2732 最大流 **
    hdu 5233 离散化 **
    hdu 3555 数位dp *
    zoj 3469 区间dp **
    2015 安徽程序设计省赛总结
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4822919.html
Copyright © 2020-2023  润新知