力扣155 最小棧(以空間換時間,使用輔助棧)

2021-10-05 08:51:13 字數 1392 閱讀 5438

力扣155. 最小棧(以空間換時間,使用輔助棧)

設計乙個支援 push ,pop ,top 操作,並能在常數時間內檢索到最小元素的棧。

push(x) —— 將元素 x 推入棧中。

pop() —— 刪除棧頂的元素。

top() —— 獲取棧頂元素。

getmin() —— 檢索棧中的最小元素。

示例:輸入:

["minstack","push","push","push","getmin","pop","top","getmin"]

[,[-2],[0],[-3],,,,]

輸出:[null,null,null,null,-3,null,0,-2]

解釋:minstack minstack = new minstack();

minstack.push(-2);

minstack.push(0);

minstack.push(-3);

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

minstack.pop();

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

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

思路:「以空間換時間」,使用輔助棧

入棧時,最小值入棧才同步;出棧時,最小值出棧才同步。

注意的點:

(1)輔助棧為空的時候,必須放入新進來的數;

(2)新來的數小於或者等於輔助棧棧頂元素的時候,才放入,特別注意這裡「等於」要考慮進去,因為出棧的時候,連續的、相等的並且是最小值的元素要同步出棧;

(3)出棧的時候,輔助棧的棧頂元素等於資料棧的棧頂元素,才出棧。

複雜度分析:

時間複雜度:o(1),「出棧」、「入棧」、「檢視棧頂元素」的操作不論資料規模多大,都只有有限個步驟,因此時間複雜度是:o(1)。

空間複雜度:o(n),這裡 n 是讀出的資料的個數。

//出棧時,最小值出棧才同步;入棧時,最小值入棧才同步。

#include "stdafx.h"

#include #include #include using namespace std;

class minstack

void push(int x)

//如果發現小於或者等於最小值的話,放進輔助棧

else

}} void pop()

//如果出棧的是最小值,那麼輔助棧的top也要出棧

//出棧的時候,輔助棧的棧頂元素等於資料棧的棧頂元素,才出棧。

else

}int top()

int getmin() };

int main()

力扣 155 最小棧

設計乙個支援 push pop top 操作,並能在常數時間內檢索到最小元素的棧。push x 將元素 x 推入棧中。pop 刪除棧頂的元素。top 獲取棧頂元素。getmin 檢索棧中的最小元素。class minstack public void pop public int top publi...

力扣155 最小棧

設計乙個支援 push pop top 操作,並能在常數時間內檢索到最小元素的棧。push x 將元素 x 推入棧中。pop 刪除棧頂的元素。top 獲取棧頂元素。getmin 檢索棧中的最小元素。法1 使用乙個新棧,棧頂表示原棧中最小值,每次往原棧插入時,若小於等於新棧頂,則同時插入新棧,出棧時,...

力扣 155 最小棧

設計乙個支援 push pop top 操作,並能在常數時間內檢索到最小元素的棧。push x 將元素 x 推入棧中。pop 刪除棧頂的元素。top 獲取棧頂元素。getmin 檢索棧中的最小元素。示例 輸入 minstack push push push getmin pop top getmin...