Min Stack,minstack

來源:互聯網
上載者:User

Min Stack,minstack
原題連結: https://oj.leetcode.com/problems/min-stack/
這道題是關於棧的題目,實現一個棧的準系統,外加一個獲得最小元素的操作。正常情況下top,pop和push操作都是常量時間的,而主要問題就在於這個getMin上面,如果遍曆一遍去找最小值,那麼getMin操作就是O(n)的,既然出出來了這道題就肯定不是這麼簡單的哈。比較容易想到就是要追溯這個最小值,在push的時候維護最小值,但是如果pop出最小值的時候該如何處理呢,如何獲得第二小的值呢?如果要去尋找又不是常量時間了。解決的方案是再維護一個棧,我們稱為最小棧,如果遇到更小的值則插入最小棧,否則就不需要插入最小棧(注意這裡正常棧是怎麼都要插進去的)。這裡的正確性在於,如果後來得到的值是大於當前最小棧頂的值的,那麼接下來pop都會先出去,而最小棧頂的值會一直在,而當pop到最小棧頂的值時,一起出去後接下來第二小的就在pop之後最小棧的頂端了。如此push時最多插入兩個棧一個元素,是O(1),top是取正常棧頂,自然是O(1),而pop時也是最多拋出兩個棧的棧頂元素,O(1)。最後getMin只需要peek最小棧頂棧頂即可,所以仍是O(1),實現了所有操作的常量操作,空間複雜度是O(n),最小棧的大小。代碼如下:

class MinStack {    ArrayList<Integer> stack = new ArrayList<Integer>();    ArrayList<Integer> minStack = new ArrayList<Integer>();    public void push(int x) {        stack.add(x);        if(minStack.isEmpty() || minStack.get(minStack.size()-1)>=x)        {            minStack.add(x);        }    }    public void pop() {        if(stack.isEmpty())        {            return;        }        int elem = stack.remove(stack.size()-1);        if(!minStack.isEmpty() && elem == minStack.get(minStack.size()-1))        {            minStack.remove(minStack.size()-1);        }    }    public int top() {        if(!stack.isEmpty())            return stack.get(stack.size()-1);        return 0;    }    public int getMin() {        if(!minStack.isEmpty())            return minStack.get(minStack.size()-1);        return 0;    }}

這道題在理清思路之後代碼還是比較簡單的,這裡用ArrayList來實現棧,當然也可以用鏈表,不過對於時間複雜度要求比較高,所以重點是想出維護最小棧頂做法,屬於比較考察站的性質的題目,是很不錯的面試題目,在面經中也經常出現。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.