單調棧


1.單調棧簡介

單調棧是一種數據結構,它里邊存放的數據具有單調性,每個元素都只進棧一次,進棧時會把破壞棧的單調性的元素彈出。用代碼表示就是:

1 stack <int> s;//單調棧,單調遞增
2 int index;//要進棧的元素
3 while(!s.empty()&&s.top<index){
4 
5     s.pop();
6 
7 }
8 s.push(index);

彈出的元素不會再進棧,所以單調棧的復雜度為O(n)。

2.單調棧的功能

單調棧可以尋找每個元素前第一個比它大(小)的數,舉個例子,30、8、23找每個元素前第一個比它大的元素,則應用單調遞減棧,30入棧,此時它入棧前棧是空的,所以他前面沒有比它大的數。8入棧,此時這個棧的元素符合單調遞減,30不用出棧,8入棧前棧頂是30,所以8前面第一個比它大的數是30,23入棧,由於8破壞了這個棧的單調性,所以要出棧,23入棧前棧頂是30(8已出棧),所以23前第一個比她大的元素是30。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM