155. Min Stack

来源:互联网 发布:广东广电网络收费标准 编辑:程序博客网 时间:2024/06/14 16:56

题目:https://leetcode.com/problems/min-stack/

思路:
1.之前想到用stack,pop,push什么的都挺方便的,getmin这个方法,我的想法是设立一个暂时的堆用来存储stack中pop出来的值(通过pop得到的值与min对比得到新的min),而后将这个堆中的值存回stack。但是时间感人,timelimit exceed!

2.(dicuss中)新的是用链表,并且新建一个类Item用来存值以及当前的最小值

代码:

===============================public class MinStack {    public LinkedList<Item> item;    public int size;    /** initialize your data structure here. */    public MinStack() {        item = new LinkedList<>();        size = 0;    }    public void push(int x) {        Item newItem = new Item();        newItem.val = x;        if(isEmpty())        {            newItem.min = newItem;        }        else        {            int lastmin = item.getLast().min.val;            if(x<lastmin)                newItem.min = newItem;            else                newItem.min = item.getLast().min;        }        item.addLast(newItem);        size++;    }    public void pop() {        if(!isEmpty())        {            item.removeLast();            size--;        }    }    public int top() {        if(!isEmpty())            return item.getLast().val;        else            return -1;    }    public int getMin() {        return item.getLast().min.val;    }    public boolean isEmpty()    {        if(size==0)            return true;        else            return false;    }    class Item    {        int val;        Item min;    }}/** * Your MinStack object will be instantiated and called as such: * MinStack obj = new MinStack(); * obj.push(x); * obj.pop(); * int param_3 = obj.top(); * int param_4 = obj.getMin(); */111ms
0 0
原创粉丝点击