定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的min函式(在該棧中,呼叫min、push及pop的時間複雜度應為o(1))。
把每次壓棧時的最小元素(每次新壓棧元素和之前的最小元素進行比較)放進另外乙個專門存放最小值的輔助棧中。例如:
(1)初始空棧,壓入元素3,目前3是最小值,放入輔助棧,目前資料棧3,輔助棧3;
(2)壓入元素4,因為4>3,所以仍然往輔助棧中壓入3,目前資料棧3, 4,輔助棧中為3,3;
(3)壓入元素2,因為2<3,所以往輔助棧中壓入2, 目前資料棧3,4,2,輔助棧中為3,3,2;
(4)壓入元素1, 因為1<2,所以往輔助棧中壓入1,目前資料棧3,4,2,1,輔助棧中為3,3,2,1;
(5)彈出1,資料棧3,4,2,輔助棧中為3,3,2;
(6)彈出2,資料棧3,4,輔助棧中為3,3;
(7)壓入元素0,資料棧3,4,0,輔助棧中為3,3,0.
# -*- coding:utf-8 -*-
class
solution
:def
__init__
(self)
: self.stack =
self.minstack =
defpush
(self, node)
:# write code here
ifnot self.minstack or node < self.minstack[-1
]:# 儲存最小元素到棧頂
else:-
1])def
pop(self)
:# write code here
if self.stack:
self.stack.pop(
) self.minstack.pop(
)def
top(self)
:# write code here
if self.stack:
return self.stack[-1
]else
:return
none
defmin
(self)
:# write code here
if self.minstack:
return self.minstack[-1
]else
:return
none
20 包含min函式的棧
思路1 選用存放資料的棧s和存放當前最小值的輔助棧mins,當s記憶體入比當前最小值還小的樹,則該數字入輔助棧,若存放值比當前最小值大,則再次存入當前最小值到輔助棧 這樣mins存在冗餘資訊,可進一步改進。1 class solution else void pop int top int min ...
20 包含min函式的棧
題目 定義乙個棧的資料結構,請在該型別中實現乙個能夠得到棧中最小元素的min函式 思路 可以使用兩個棧,乙個儲存資料,乙個儲存棧中的最小元素。例如 定義兩個棧stack1和stack2,將4壓入stack1,stack2為空,同時將4壓入stack2 然後將2壓入stack1,這時stack1的最小...
20 包含min函式的棧
題目描述 定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的min函式 時間複雜度應為o 1 python class solution def init self self.stack 用於存放對應棧元素所在位置及之前元素最小值 self.assist defpush self,no...