1.每次 新元素進棧的時候,棧裏面的元素須要排序排序
2.讓最小的或者最大的元素位於棧頂,這樣就能夠在O(1)時間內得到最小或者最大的值了,隊列
------變量
3.上面的想法 不能保證,進棧(進了隊列)以後 ,出去的元素的順序,所以只有一個棧是不行的數據
4.要有個保存最小或者最大的元素,每次進棧的時候,跟這個數比較,存起來,top
---------------時間
5.可是有個問題,就是你最大的元素(或者最小的元素出去)了以後,你該怎麼去更新這個值呢,
6.就是隻 維持一個變量是不夠的
7.最小元素或者最大元素出棧以後,要可以保證次小元素立馬填補如今這個位置
--------
也就是說,咱們須要把次小元素和最小元素都保存起來,放到另外的一個輔助棧裏面,
--------------
舉例子
1. 進棧3 數據是3 輔助棧3 最小值3
2. 進棧4 數據是3,4 輔助棧是3,3 最小值3
3. 進棧2 數據是3,4,2 輔助棧3,3,2 最小值2
4. 進棧1 數據是3,4,2,1 輔助棧3,3,2,1 最小值1
5. 彈出 數據是3,4,2 輔助棧是3,3,2 最小值是2
6 彈出 數據是3,4, 輔助棧是3,3, 最小值是3
7 進棧0 數據是3,4,0 輔助棧是3,3,0 最小值0
每次把最小的棧壓入輔助棧,就能保證棧頂的輔助元素一直是最小的數
問題就是 當我彈出的時候,輔助棧也要跟着彈出一個數才能夠
代碼就是:
1.進棧
數據 value 進入數據棧,
判斷輔助棧
若是輔助棧爲空,或者輔助棧的棧頂元素比 value大,就把value壓如輔助棧,
不然就把 輔助棧的棧頂元素 重複壓入 輔助棧裏面
//要保證 數據棧和輔助棧的元素個數一致
2.彈出
數據棧不能爲空,輔助棧也不能爲空
數據棧彈出
輔助棧彈出
3.求最大值或者最小值
數據棧不能爲空,輔助棧也不能爲空,
直接返回 輔助棧的top元素