LintCode刷題 12 帶最小值操作的棧

2021-09-11 13:15:17 字數 1487 閱讀 1153

實現乙個帶有取最小值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.陣列中只有乙個重複的數,但可能重複超過一次 您在真實的面試中是...