實現乙個帶有取最小值min方法的棧,min方法將返回當前棧中的最小值。
你實現的棧將支援push,pop 和 min 操作,所有操作要求都在o(1)時間內完成。
注意事項
如果堆疊中沒有數字則不能進行min方法的呼叫
樣例
如下操作:push(1),pop(),push(2),push(3),min(), push(1),min() 返回 1,2,1
題目的要求就是在o(1)的時間內完成min操作。可以考慮以空間換時間。
新增乙個minstack棧,用來儲存最小值。
當往stack中新增乙個元素時,判斷當前元素是不是比minstack棧頂的元素大,大就不操作,否則就將該元素也壓入minstack中。這樣,minstack中就儲存了一系列最小值,棧頂元素就是最小值。
當彈出stack中的元素時,判斷下當前彈出的元素是不是跟minstack元素相等,相等就彈出minstack棧頂元素。
注:在python中,list[-1]代表取陣列的最後乙個元素,也就是棧頂元素。
class minstack:
def __init__(self):
# do intialization if necessary
#主棧 self.stack =
#最小值棧
self.minstack =
""" @param: number: an integer
@return: nothing
""" def push(self, number):
# write your code here
#符合條件就將值壓入最小值棧
if not self.minstack:
else:
if number <= self.minstack[-1]:
""" @return: an integer
""" def pop(self):
# write your code here
if not self.stack:
return none
#如果最小值棧的棧頂元素與當前要彈出的元素相等,那該棧頂元素和要彈出
if self.stack[-1] == self.minstack[-1]:
self.minstack.pop()
return self.stack.pop()
""" @return: an integer
""" def min(self):
# write your code here
if not self.minstack:
return none
return self.minstack[-1]
複製**
個人目前只懂一丁點python語法,所以不做語法上的優化,而且整體**風格效果會盡量跟c語言趨於一致。 lintcode刷題 最小差
原題如下 最小差 給定兩個整數陣列 第乙個是陣列a,第二個是陣列b 在陣列 a 中取 a i 陣列 b 中取 b j a i 和 b j 兩者的差越小越好 a i b j 返回最小差。您在真實的面試中是否遇到過這個題?yes 樣例給定陣列 a 3,4,6,7 b 2,3,8,9 返回0。做題思路 1...
lintcode 第12題帶最小值操作的棧
要求 實現乙個帶有取最小值min方法的棧,min方法將返回當前棧中的最小值。你實現的棧將支援push,pop 和 min 操作,所有操作要求都在o 1 時間內完成。注意事項 如果堆疊中沒有數字則不能進行min方法的呼叫。樣例 如下操作 push 1 pop push 2 push 3 min pus...
LintCode刷題隨筆
給出乙個陣列nums包含n 1個整數,每個整數是從1到n 包括邊界 保證至少存在乙個重複的整數。假設只有乙個重複的整數,找出這個重複的數。1.不能修改陣列 假設陣列只能讀 2.只能用額外的o 1 的空間 3.時間複雜度小於o n 2 4.陣列中只有乙個重複的數,但可能重複超過一次 您在真實的面試中是...