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。