請設計乙個棧,除了常規棧支援的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...