定義: 單調棧就是棧內元素遞增或者單調遞減的棧,並且只能在棧頂操作。單調棧的維護是o(n)的時間複雜度,所有元素只會進進棧一次
性質:
單調棧裡面的元素具有單調性;
元素加入棧前會把棧頂破壞單調性的元素刪除;
使用單調棧可以找到元素向左遍歷的第乙個比他小的元素(單增棧),也可以找到元素向左遍歷第乙個比他大的元素(單減棧);
一般使用單調棧的題目具有以下的兩點:
注意:雖然稱作是遞增遞減棧,但是實際儲存的值並不是單調的,因為可以存座標,只有座標帶入陣列才是單調的。這樣既可以儲存陣列的值,也可以儲存陣列下標。如下面的2,3,4例題。
例題:
1、leetcode 496. next greater element i
class
solution
stk.
push
(nums2[i]);
}for
(int i =
0; i < nums1.
size()
; i++
)return res;}}
;
class
solution
stk.
push
(i);
}return res;}}
;
3、leetcode 84. largest rectangle in histogram
class
solution
ss.push
(i);
}return res;}}
;
4、leetcode 456. 132 pattern
class
solution
ss.push
(i);
}int min = nums[0]
;for
(int i =
1; i < n ; i++)if
(nums[i]
> right_min[i]
&& min < right_min[i]
)return
true;}
return
false;}
};
其他使用單調棧的例題
仰視奶牛:找出每頭奶牛最近仰視物件
發射站;發出的能量只被兩邊最近的且比它高的發射站接收
leetcode monotone stack summary 單調棧小結
單調棧的介紹以及一些基本性質
秦淮河單調棧講義
演算法 單調棧
單調棧 從左往右進行遍歷,如果棧頂元素大於等於當前的元素,直接出棧 while 迴圈 退出while 迴圈兩個條件,棧空,或者棧不為空,此時棧頂元素小於單前元素 if 如果棧不為空,表明棧頂元素小於當前元素,將棧頂元素儲存在當前元素對應下標的陣列中 從右邊向左進行遍歷 while 如果棧頂元素大於當...
演算法學習筆記 16 單調棧與單調佇列
單調棧和單調佇列都是一類演算法思想,是棧和佇列在演算法裡很常見的應用。單調棧演算法一般用模擬棧或者程式語言給實現的棧都可以,因為只要求在棧頂入棧和退棧,以及取棧頂元素。單調佇列演算法很多時候用手寫的模擬佇列比較方便,因為很多時候需要雙口出隊的佇列,主要是在隊尾也有刪除元素的需求。而模擬佇列都是游標移...
演算法 單調棧專題
單調棧是一種理解起來很容易,但是運用起來並不那麼簡單的資料結構。一句話解釋單調棧,就是乙個棧,裡面的元素的大小按照他們所在棧內的位置,滿足一定的單調性。題目是這樣的,給乙個陣列,返回乙個大小相同的陣列。返回的陣列的第i個位置的值應當是,對於原陣列中的第i個元素,至少往右走多少步,才能遇到乙個比自己大...