包含min函式的棧

2021-10-09 04:47:56 字數 1935 閱讀 9448

示例:

minstack minstack = new minstack();

minstack.push(-2);

minstack.push(0);

minstack.push(-3);

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

minstack.pop();

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

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

2.1  思路分析

普通棧的push與pop函式時間複雜度為o(1),而獲取棧的最小值min()函式需要遍歷整個棧,時間複雜度為o(n);

若將min()函式的降低為o(1),那麼需要設定輔助棧:

資料棧a:棧a用於儲存元素;

資料棧b:棧b用於儲存棧a中所有非嚴格降序的元素,則棧a中的最小原始終對應棧b的棧頂元素,即min()函式只需要返回  棧b的棧頂元素即可。

3.函式設計:

(1)push(x)函式:重點維護棧b的非嚴格降序

1.將元素x壓入到棧a;

2.若棧b為空或者x小於等於(如果只是小於,那麼棧a中的重複的最小元素出棧時,會導致棧b空棧異常)棧b的棧頂元素,那麼將x壓入棧b;

(2)pop()函式:重點保證棧a和棧b的元素一致性

1.執行棧a出棧,出棧元素記為y;

2.若y等於棧b的棧頂元素,說明最小元素出棧了,要更新棧b,則將執行棧b出棧。

(3)top()函式:直接返回a的棧頂元素。

(4)min()函式:直接返回b的棧頂元素。

2.2  **實現

class minstack 

public void push(int x)

}public void pop()

}public int top()

public int min()

}/**

* your minstack object will be instantiated and called as such:

* minstack obj = new minstack();

* obj.push(x);

* obj.pop();

* int param_3 = obj.top();

* int param_4 = obj.min();

*/

2.3  複雜度分析

3.1  思路分析

寫乙個鍊錶類,其成員包括val、min、next,分別是當前節點的值、鍊錶中節點最小值、指向下乙個節點的指標;

push方法:不斷增加鍊錶節點(按照...③--->②--->①--->null的方式從右向左新增節點)且更新最小值的過程;

min方法:返回鍊錶的成員min的值;

3.2  **實現

class node 

}class minstack

public void push(int x) else

}public void pop()

public int top()

public int min()

}

3.3  複雜度分析

js 包含min函式的棧 包含min函式的棧

目標 定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的 min 函式在該棧中,呼叫 min push 及 pop 的時間複雜度都是 o 1 設計思路 我們要做的是在我們每次資料入棧的時候,記錄當前資料棧中最小值,並且在pop 出棧之後依然能找到最小值 方案 如果只用乙個 min 變數來儲...

包含min函式的棧

題目描述 定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。輸入 輸入可能包含多個測試樣例,輸入以eof結束。對於每個測試案例,輸入的第一行為乙個整數n 1 n 1000000 n代表將要輸入的操作的步驟數。接下來有n行,每行開始有乙個字母ci。ci s 時,接下有乙個數字k,代...

包含min函式的棧

1.問題描述 定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的函式,在該棧中呼叫min,push及pop的時間複雜度都為o 1 來自 劍指offer 2.分析 我們可以使用乙個輔助棧,專門來處理題目中得到棧的最小元素的函式時間複雜度為o 1 的這個需求。當我們壓棧時,另外乙個棧正常進行,...