zoukankan      html  css  js  c++  java
  • LeetCode Min Stack

    #include <iostream>
    #include <cstdlib>
    #include <vector>
    
    using namespace std;
    
    class MinStack2 {
    private:
        vector<pair<int, int> > mins;
        vector<int> stack;
    public:
        void push(int x) {
            stack.push_back(x);
            if (mins.size() == 0) {
                mins.push_back(make_pair(x, 1));
            } else {
                int curr_min = mins.back().first;
                if (curr_min > x) {
                    mins.push_back(make_pair(x, 1));
                } else if (curr_min == x) {
                    mins.back().second++;
                } else {
                    // do nothing
                }
            }
        }
    
        void pop() {
            if (!stack.size()) {
                return;
            }
            int x = stack.back();
            stack.pop_back();
            if (x == mins.back().first) {
                if (--mins.back().second < 1) {
                    mins.pop_back();
                }
            } 
        }
    
        int top() {
            if (!stack.size()) {
                return 0;
            }
            return stack.back();
        }
    
        int getMin() {
            if (!stack.size()) {
                return 0;
            }
            return mins.back().first;
        }
    };
    
    
    class MinStack {
    private:
        vector<int> mins;
        vector<int> stack;
    public:
        void push(int x) {
            stack.push_back(x);
            if (mins.size() == 0) {
                mins.push_back(x);
            } else {
                if (mins.back() >= x) {
                    mins.push_back(x);
                }
            }
        }
    
        void pop() {
            if (!stack.size()) {
                return;
            }
            
            if (stack.back() == mins.back()) {
                mins.pop_back();
            }
            stack.pop_back(); 
        }
    
        int top() {
            if (!stack.size()) {
                return 0;
            }
            return stack.back();
        }
    
        int getMin() {
            if (!stack.size()) {
                return 0;
            }
            return mins.back();
        }
    };
    
    int main() {
        MinStack stack;
        stack.push(3);
        stack.push(2);
        stack.push(3);
    
        cout<<stack.getMin()<<endl;
        stack.push(1);
        stack.push(1);
        cout<<stack.getMin()<<endl;
        stack.pop();
        stack.pop();
        cout<<stack.getMin()<<endl;
        return 0;
    }

    同样的逻辑用java版本的就对,C++就内存超出,难道是vector默认翻倍涨的原因?

    第二轮:

    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.

    没有对连续最小值优化的版本:

    // 10:26
    class MinStack {
    private:
        stack<int> storage;
        stack<int> mins;
    public:
        void push(int x) {
            storage.push(x);
            if (mins.empty() || x <= mins.top()) {
                mins.push(x);
            }
        }
    
        void pop() {
            if (storage.empty()) {
                return;
            }
            int x = storage.top();
            storage.pop();
            if (x <= mins.top()) {
                mins.pop();
            }
        }
    
        int top() {
            return storage.top();
        }
    
        int getMin() {
            return mins.top();
        }
    };
  • 相关阅读:
    坐看夕阳
    张学孟 (帮别人名字作诗)
    光棍节有感
    我懂
    陶婷(帮别人名字作诗)
    你的爱是不是在等着我
    OpenCV数据读写操作
    数字图像处理中的形态学
    C++/C学习笔记(一)
    利用opencv绘制 灰度直方图 RGB直方图 HSV直方图 直方图均衡化
  • 原文地址:https://www.cnblogs.com/lailailai/p/4104780.html
Copyright © 2011-2022 走看看