如何以常數時間找到棧中的最小值?

2021-10-06 10:32:29 字數 1293 閱讀 8224

leetcode155. 最小棧

思路:利用輔助棧

1.在push的時候主棧直接push,對於輔助棧如果棧為空,直接push,如果棧不為空,判斷push的值是否比棧頂值小,如果小於等於,則push,反之不push。

2.pop的時候主棧判斷不為空後直接pop,輔助棧判斷不為空後,如果pop的值等於棧頂的值,輔助棧pop,反之不pop。

3.getmin的時候直接獲取輔助棧棧頂元素即是當前最小值。

**如下:

class

minstack

// public void push(int x) else

// }

// }

// public void pop()

// if(!minstack.isempty()&&a == minstack.peek())

// }

// public int top()

// return integer.min_value;

// }

// public int getmin()

// return integer.min_value;

// }

//新建節點儲存最小值49%

stack

stack = null;

public

minstack()

class

node

}public

void

push

(int x)

else

else}}

public

void

pop()}

public

inttop()

return integer.min_value;

}public

intgetmin()

return integer.min_value;}}

/** * 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();

*/

以上為兩種方法,一種是輔助棧,一種是建立節點每次訪問的時候帶上min值。第二種方法效率低一些。畢竟每次操作的是乙個類。

在O 1 找到棧中的最小值

定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的min函式。在該棧中,呼叫min push及pop的時間複雜度都是o 1 push和pop本來都是o 1 這個不需要擔心,但是獲取最小值的話,如果在棧裡新增乙個成員變數存放最小的元素。每次壓入乙個新元素進棧的時候,如果該元素比當前最小的元素...

3 2 棧的最小值

ntm inim um int minimum intmin imum 其時間複雜度為o 1 o 1 o 1 該演算法的缺點是當棧中元素較多時浪費了較多空間。以下是實現 和測試 測試結果如圖1所示。實現 class nodewithmin nodewithmin operator nodewithm...

常數時間取得min值的棧

設計這樣的棧,常數時間內操作min,push,pop 又看了下程式設計之美關於此題的解法,總覺得太過繁瑣,實際上只需要用乙個陣列來儲存歷屆最小值即可,還可以省略掉乙個下標,不需要如此麻煩。include using namespace std class stack void push int it...