包含min函式的棧

2021-10-24 01:10:55 字數 1748 閱讀 5695

/*	劍指offer30:包含min函式的棧

* 題目描述:定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的 min 函式在該棧中,

* 呼叫 min、push 及 pop 的時間複雜度都是 o(1)。

* 解題思路:用鍊錶模擬棧,push、pop時間複雜度就是o(1),維持乙個指標指向棧內最小元素

* 使min的時間複雜度也是o(1).

* (這種解題思路是錯誤的,因為只能通過min指標找到

* 曾經稱為過最小值的結點,但還有很多結點不曾成為過最小值,當成為過最小值的結點

* 都出棧後,無法找到剩餘結點的最小值)。

* (以上的錯誤分析是錯誤的,棧中數字的形式類似於【min1、value1、min2、value2、min3】,

* 不會發生錯誤分析中的那種情況即最小元素都出棧了,剩下的元素未被標記過最小,最起碼棧底是最小

* 錯誤的原因在於,pop函式在刪除非最小元素後沒return,導致有接著刪了個最小元素)

* 題解思路:維持乙個額外的棧用來記錄最小元素,棧空或新入棧元素小於等於最小棧的棧頂是,入最小棧

* 出棧時若出棧元素等於最小棧元素,最小棧同時出棧。

* *

* 測試:在棧空的情況下,pop、top、min,題目給的**模板 top min函式的返回值為int,不考慮這兩個函式的null

* */

public class baohanminhanshudezhan

}class minstack1

public stacknode() }

stacknode top = new stacknode();

stacknode min = null;

/** initialize your data structure here. */

public minstack1()

public void push(int x)

if(top.next!=null&&x<=min.val)

node.next=top.next;

top.next=node;

}public void pop()

if(top.next!=null&&top.next.val==min.val)

}public int top()

public int min()

}class minstack2

public stacknode()

} stacknode stacktop = new stacknode();

stacknode mintop = new stacknode();

/** initialize your data structure here. */

public minstack2()

public void push(int x)

//棧非空,且x小於等於最小棧棧頂,入最小棧

if(stacktop.next!=null&&mintop.next.val>=x)

//x入棧

node.next=stacktop.next;

stacktop.next=node;

}public void pop() else

}public int top()

public int min()

}

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 的這個需求。當我們壓棧時,另外乙個棧正常進行,...