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

2021-10-18 06:28:57 字數 1317 閱讀 7856

目標:定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的 min 函式在該棧中,呼叫 min、push 及 pop 的時間複雜度都是 o(1)。

設計思路:    我們要做的是在我們每次資料入棧的時候,記錄當前資料棧中最小值,並且在pop()出棧之後依然能找到最小值;

方案①,如果只用乙個 min 變數來儲存每次入棧時候的最小值,那麼出棧的時候,當前的最小值還是棧中的最小值嗎?假設棧中的資料按入棧順序依次為[ 2, 3, 5, 1 ] ,很明顯此時記錄的min值為1,那麼當我們pop()出一條資料之後,堆疊變為 [ 2, 3, 5 ] ,此時的最小值應為2,但是記錄的min值為1,最小值記錄已丟失,此方案不通。

方案②,基於方案①的問題,我們應該設計乙個結構,能夠儲存我們每一步入棧的時候情況下的當前最小值。可能我們會想到用陣列結構排序後取最小值,但是要保證時間複雜度為o(1),那麼陣列結構方案捨棄(沒有一種陣列排序為o(1)複雜度)。

方案③,在這裡我採用堆疊結構來儲存記錄最小值,為什麼採用堆疊呢,堆疊結構有乙個特點是保護現場和恢復現場的功能。想象一下,每次我們資料入棧時儲存最小值,出棧的時候還要能恢復上一次的最小值,是不是和堆疊的這個特點不謀而合呢。所以我們採用堆疊結構。當然,在這裡我們需要使用雙倍的儲存空間來實現功能,以空間換取時間╮(╯▽╰)╭。

首先我們實現乙個stack結構,**如下:

1 class stack 5 push(v) 8 pop() 11 isempty() 14 count() 17 top() 20 }

接著實現最小堆疊**

1 class minstack 5 push(val)

push(val) else{

min_stack.push(min_stack.top())

pop() {this.data_stack.pop()this.min_stack.pop()

min() {return this.min_stack.top()

const min_stack= newminstack()

min_stack.push(2)

console.log(min_stack.min());

min_stack.push(3)

console.log(min_stack.min());

min_stack.push(5)

console.log(min_stack.min());

min_stack.push(1)

console.log(min_stack.min());

min_stack.pop()

console.log(min_stack.min());

minstack

@

包含min函式的棧 js

定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的min函式 時間複雜度應為o 1 第一種 js陣列的一些方法 第二種 當node stack2的最後乙個值時,才push進來,那麼pop的時候就需要驗證stack1 pop出來的那個值是否等於stack2的最後乙個值 也就是最小值 pu...

包含min函式的棧

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

包含min函式的棧

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