資料結構 單調棧

2021-10-10 07:38:06 字數 1146 閱讀 2894

上班無事,刷力扣發現了個新名詞:單調棧

題目:496. 下乙個更大元素 i

名字上就聽的出來,單調棧中存放的資料應該是有序的,所以單調棧也分為單調遞增棧和單調遞減棧

單調遞增棧:棧中資料出棧的序列為單調遞增序列

單調遞減棧:棧中資料出棧的序列為單調遞減序列

ps:這裡一定要注意所說的遞增遞減指的是出棧的順序,而不是在棧中資料的順序

現在有一組數10,3,7,4,12。從左到右依次入棧,則如果棧為空或入棧元素值小於棧頂元素值,則入棧;否則,如果入棧則會破壞棧的單調性,則需要把比入棧元素小的元素全部出棧。單調遞減的棧反之。

10入棧時,棧為空,直接入棧,棧內元素為10。

3入棧時,棧頂元素10比3大,則入棧,棧內元素為10,3。

7入棧時,棧頂元素3比7小,則棧頂元素出棧,此時棧頂元素為10,比7大,則7入棧,棧內元素為10,7。

4入棧時,棧頂元素7比4大,則入棧,棧內元素為10,7,4。

12入棧時,棧頂元素4比12小,4出棧,此時棧頂元素為7,仍比12小,棧頂元素7繼續出棧,此時棧頂元素為10,仍比12小,10出棧,此時棧為空,12入棧,棧內元素為12。

var

nextgreaterelement

=function

(nums1, nums2)

} stack.

push

(num)

p++}while

(stack.length)

return nums1.

map(num => map.

get(num))}

;

**本質上和寫兩層for迴圈沒啥區別,但是個人覺得可讀性更高,多層for迴圈巢狀加上n個if判斷的**看起來賊蛋疼,另外附上雙層for迴圈版

var

nextgreaterelement

=function

(nums1, nums2)

} result.

push(-

1)})

return result

};

資料結構 單調棧

這是筆者的第一篇部落格,由於筆者自身水平的限制。用詞可能不夠準確,句子不太通順,水平可能也不太行,敬請指出,感激不盡!我們都知道棧 stack 是一種先入後出的資料結構,而單調棧建立在棧的基礎上,它區別於普通的棧的特殊之處在於 棧中的元素一直保持著單調遞增 單調遞減的關係 比如單調遞增棧中的元素自棧...

資料結構 單調棧

之前沒有寫過棧棧是只能在某一端插入和刪除的特殊線性表就像乙個桶一樣 我們可以用stl 也可以自己寫 進棧top 然後 stack top 進棧元素 退棧可以將退棧後的乙個元素賦值到乙個地方 top 單調棧故名思議 就是多了個 單調 的要求 以下文字引用於shuyu fang的部落格 若是單調遞增棧 ...

資料結構之單調棧

dev.c 資料結構之單調棧 從數學上來講,函式的單調性也可以叫做函式的增減性。當函式f x 的自變數在其定義區間內增大 或減小 時,函式值f x 也隨著增大 或減小 則稱該函式為在該區間上具有單調性。換句話來說,函式的單調性就是在區間內的自變數只增或只減。我們說,數學中函式在一段區間內自變數只增或...