單調棧演算法筆記

2021-09-19 13:18:02 字數 1394 閱讀 6955

定義: 單調棧就是棧內元素遞增或者單調遞減的棧,並且只能在棧頂操作。單調棧的維護是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個元素,至少往右走多少步,才能遇到乙個比自己大...