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...