leetcode 題號(hào)#155 最小棧

查看題目詳情可點(diǎn)擊此處。

題目

設(shè)計(jì)一個(gè)支持 push,pop,top 操作,并能在常數(shù)時(shí)間內(nèi)檢索到最小元素的棧。

  • push(x) -- 將元素 x 推入棧中。
  • pop() -- 刪除棧頂?shù)脑亍?/li>
  • top() -- 獲取棧頂元素。
  • getMin() -- 檢索棧中的最小元素。

示例:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.

解題思路

需要實(shí)現(xiàn)的棧操作中,其他操作屬于常規(guī)的棧操作,沒(méi)有特別之處,解題的重點(diǎn)在于如何實(shí)現(xiàn)常數(shù)時(shí)間類(lèi)檢索到最小值,實(shí)現(xiàn)此操作需要額外的存儲(chǔ)空間對(duì)最小值進(jìn)行存儲(chǔ),最初肯定會(huì)考慮到用一個(gè) int 變量存儲(chǔ)最小值,每次 push 操作的時(shí)候比較元素替換最小值,檢索最小值的時(shí)候?qū)⒋?int 變量返回即可。

這樣的方法初看沒(méi)有問(wèn)題,但當(dāng)進(jìn)出棧操作時(shí),如果棧頂元素就是當(dāng)前的最小值,出棧后就需要在棧內(nèi)元素中再搜索一遍最小值并保存起來(lái),無(wú)疑會(huì)增加出棧操作的時(shí)間復(fù)雜度。

利用空間換時(shí)間的思想,可以創(chuàng)建另一個(gè)棧,當(dāng)數(shù)據(jù)入棧時(shí)會(huì)存入數(shù)據(jù)棧,同時(shí)也會(huì)把此元素對(duì)應(yīng)的最小值存儲(chǔ)在最小值棧中,類(lèi)似備忘錄模式,記錄下每個(gè)元素的最小值狀態(tài)。

代碼實(shí)現(xiàn)

class MinStack {

    /** initialize your data structure here. */
    private Stack<Integer> intStack;
    private Stack<Integer> minStack;
    private int min;

    public MinStack() {
        intStack = new Stack<>();
        minStack = new Stack<>();
        min = Integer.MIN_VALUE;
    }

    public void push(int x) {
        intStack.push(x);

        if(minStack.empty()) {
            minStack.push(x);
        } else {
            min = Math.min(minStack.peek(), x);
            minStack.push(min);
        }
    }

    public void pop() {
        intStack.pop();
        minStack.pop();
    }

    public int top() {
        return intStack.peek();
    }

    public int getMin() {
        return minStack.peek();
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 題目 難度:★☆☆☆☆類(lèi)型:棧 設(shè)計(jì)一個(gè)支持 push,pop,top 操作,并能在常數(shù)時(shí)間內(nèi)檢索到最小元素的棧。...
    玖月晴閱讀 1,785評(píng)論 1 0
  • 最小棧 題目 設(shè)計(jì)一個(gè)支持 push,pop,top 操作,并能在常數(shù)時(shí)間內(nèi)檢索到最小元素的棧。 push(x) ...
    飲酒醉回憶閱讀 242評(píng)論 0 1
  • 題目描述 [最小棧] 設(shè)計(jì)一個(gè)支持 push,pop,top 操作,并能在常數(shù)時(shí)間內(nèi)檢索到最小元素的棧。 push...
    一只可愛(ài)的檸檬樹(shù)閱讀 120評(píng)論 0 1
  • 1. 環(huán)比 以示例-超市為例: 在聚合字段上右鍵-添加表計(jì)算-百分比差異。 環(huán)比公式: (ZN(SUM([銷(xiāo)售額 ...
    一ke大白菜閱讀 6,105評(píng)論 1 1
  • 銀元起源于15世紀(jì),始鑄于歐洲,俗稱(chēng)“洋錢(qián)”“花邊錢(qián)”或“大洋”,是銀鑄幣的通稱(chēng)。銀元是舶來(lái)品,它初入中國(guó),大約是...
    藏品鑒賞Mr詹閱讀 363評(píng)論 0 2

友情鏈接更多精彩內(nèi)容