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

    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 {
        stack<int> s;
        stack<int> s_min;
        
    public:
        void push(int x) {
            s.push(x);
            if (s_min.empty() || x <= s_min.top()) {
                s_min.push(x);
            }
        }
    
        void pop() {
            if (s.top() == s_min.top()) {
                s_min.pop();
            }
            s.pop();
        }
    
        int top() {
            return s.top();
        }
    
        int getMin() {
            return s_min.top();
        }
    };

    老题了,用两个栈就可以了,后来想了个用链表的,可是爆内存了。唔唔唔。下面是链表的:

    struct node {
        int val;
        node *next;
        node *min;
        node():val(-1), next(NULL), min(NULL){}
        node(int v):val(v), next(NULL), min(NULL){}
    };
    
    class MinStack {
        node head;
        
    public:
        void push(int x) {
            node *top, *pre;
            if(head.next == NULL) {
                head.next = new node(x);
                top = head.next;
                top->min = top;
            } else {
                pre = head.next;
                head.next = new node(x);
                top = head.next;
                top->next = pre;
                if (x <= pre->min->val) {
                    top->min = top;
                } else {
                    top->min = pre->min;
                }
            }
        }
    
        void pop() {
            if (head.next == NULL) return;
            node *tmp = head.next;
            head.next = tmp->next;
            delete tmp;
        }
    
        int top() {
            return head.next->val;
        }
    
        int getMin() {
            return head.next->min->val;
        }
    };
  • 相关阅读:
    前置++和后置++的区别
    snmp数据包分析
    [codeforces538E]Demiurges Play Again
    [codeforces538D]Weird Chess
    [BZOJ3772]精神污染
    [BZOJ4026]dC Loves Number Theory
    [BZOJ1878][SDOI2009]HH的项链
    [BZOJ3658]Jabberwocky
    [BZOJ3932][CQOI2015]任务查询系统
    [BZOJ3551][ONTAK2010]Peaks加强版
  • 原文地址:https://www.cnblogs.com/easonliu/p/4210502.html
Copyright © 2011-2022 走看看