LeetCode Min Stack

来源:互联网 发布:网络诈骗超过2000 编辑:程序博客网 时间:2024/06/05 08:29

原题描述:


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.

NOTE:栈中的最小元素要在O(1)时间内找到,所以可以用两个栈来实现,一个站存放所有的元素,另一个栈存放最小值,这样做空间和时间复杂度是最小的。下面是ac的代码:

class MinStack {private:    stack<int> elements;    stack<int> mins;public:    void push(int x) {        if (elements.empty() || mins.top() >= x) mins.push(x);        elements.push(x);    }    void pop() {        if (elements.empty()) return;        if (elements.top() == mins.top()) {            mins.pop();        }        elements.pop();    }    int top() {        return elements.top();    }    int getMin() {        return mins.top();    }};


    另外的一种思路是用链表的形式实现,不过在平台上运行结果是MLE。代码如下:

class MinStack {public:    class Node {    public:        int val;        int m;        Node *next;        Node (int val, int m) {            this->val = val;            this->m = m;            next = NULL;        }    };    Node *s;    MinStack () {        s = NULL;    }    void push(int x) {        Node *n = new Node(x, x);        if (!s) {            s = n;        } else {            if (n->m > s->m) n->m = s->m;            n->next = s;            s = n;        }    }    void pop() {        if (s) {            Node *t = s;            s = s->next;            delete(t);        }    }    int top() {        return s->val;    }    int getMin() {        return s->m;    }};

不知道用C++实现除了第一段代码有没有不超内存的方法?或者其他的思路!

另外还有一些收获:

1、C++中定义类时只能定义指向自己的指针,不能直接指向自己

2、struct和class唯一的不同是默认情况下,struct的访问权限是public,而class是private

0 0
原创粉丝点击