面試題 03 02 棧的最小值

2021-10-25 17:23:21 字數 2059 閱讀 4246

請設計乙個棧,除了常規棧支援的pop與push函式以外,還支援min函式,該函式返回棧元素中的最小值。執行push、pop和min操作的時間複雜度必須為o(1)。

示例:

minstack minstack = new minstack();

minstack.push(-2);

minstack.push(0);

minstack.push(-3);

minstack.getmin(); --> 返回 -3.

minstack.pop();

minstack.top(); --> 返回 0.

minstack.getmin(); --> 返回 -2.

最小棧有2種方式實現:

stackdata: 儲存原始棧,stackmin: 儲存最小棧

class

minstack

:def

__init__

(self)

:"""

initialize your data structure here.

"""self.stackdata =

self.stackmin =

defpush

(self, x:

int)

->

none:if

not self.stackmin:

else

:if x > self.stackmin[-1

]:-1

])else

:def

pop(self)

->

none

: self.stackmin.pop(

)return self.stackdata.pop()if

len(self.stackdata)

>

0else

none

deftop

(self)

->

int:

return self.stackdata[-1

]iflen(self.stackdata)

>

0else

none

defgetmin

(self)

->

int:

return self.stackmin[-1

]iflen(self.stackmin)

>

0else

none

class

minstack

:def

__init__

(self)

:"""

initialize your data structure here.

"""self.stackdata =

self.stackmin =

defpush

(self, x:

int)

->

none:if

not self.stackmin:

else

:if x <= self.stackmin[-1

]:defpop

(self)

->

none

: res = self.stackdata.pop(

)if res == self.getmin():

self.stackmin.pop(

)return res

deftop(self)

->

int:

return self.stackdata[-1

]iflen(self.stackdata)

>

0else

none

defgetmin

(self)

->

int:

return self.stackmin[-1

]iflen(self.stackmin)

>

0else

none

面試題 03 02 棧的最小值

請設計乙個棧,除了常規棧支援的pop與push函式以外,還支援min函式,該函式返回棧元素中的最小值。執行push pop和min操作的時間複雜度必須為o 1 示例 minstack minstack newminstack minstack.push 2 minstack.push 0 minst...

面試題 03 02 棧的最小值

請設計乙個棧,除了常規棧支援的pop與push函式以外,還支援min函式,該函式返回棧元素中的最小值。執行push pop和min操作的時間複雜度必須為o 1 示例 minstack minstack new minstack minstack.push 2 minstack.push 0 mins...

力扣 面試題 03 02 棧的最小值 雙棧

思路 搞個雙棧,乙個棧就做正常的操作,另外乙個棧搞成單調非增的即可。有兩種實現方式。class minstack void push int x void pop int top int getmin private 正常的棧 stack int s 單調非公升棧 stack int min you...