程式設計 單調棧

2022-08-21 17:36:10 字數 3032 閱讀 6620

單調棧 單調遞減棧,棧底到棧頂,元素依次減小。

個人認為是比武棧。

有個土財主要嫁閨女,全城的小夥子都想去試試,4.1號正式開始招親,3.31大家就來排隊。本來是是按照先來後到的順序進行排隊,但是排在後面的武功高的人不服氣,就把前面武功不如自己的打跑了。

一直遇到排在自己前面武功比自己高強的人,他才會老老實實的排隊。

最後演變成:每來乙個人,都會和隊尾的人比較,能打得過,就把他打跑,一直遇到自己打不過的人,再老老實實的排隊,被打跑的人,會掏個小本本,默默的記下打跑自己的人,君子報仇,十年不晚。

這樣,每乙個被打跑的人,都知道在自己後面,離自己最近的,比自己厲害的人是誰;每乙個能留在隊中的人,都可以和地主說,我後面沒有比我更加厲害的了,你把女兒嫁給我吧。

**如下:

class

solution

st.push(i);

}return

res;}};

給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖,計算按此排列的柱子,下雨之後能接多少雨水。

示例 1:

輸入:height = [0,1,0,2,1,0,1,3,2,1,2,1]

輸出:6

解釋:上面是由陣列 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度圖,在這種情況下,可以接 6 個單位的雨水(藍色部分表示雨水)。

示例 2:

輸入:height = [4,2,0,3,2,5]

輸出:9

class

solution

}st.push(i);

}return

result;

}};int

main()

;

//vectorv;

cout <

}

84. 柱狀圖中最大的矩形

給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度為 1 。

求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。

以上是柱狀圖的示例,其中每個柱子的寬度為 1,給定的高度為 [2,1,5,6,2,3]。

圖中陰影部分為所能勾勒出的最大矩形面積,其面積為 10 個單位。

示例:輸入: [2,1,5,6,2,3]

輸出: 10

class

solution

st.push(i);

}stack

st2;

vector

res2(heights.size(),-1

);

//逆序尋找最近的比自己小的值

for (int i = heights.size() - 1; i >= 0; --i)

st2.push(i);

}for (int i = 0; i < heights.size(); ++i)

return

result;}};

給你兩個 沒有重複元素 的陣列nums1nums2,其中nums1nums2的子集。

請你找出nums1中每個元素在nums2中的下乙個比其大的值。

nums1中數字x的下乙個更大元素是指xnums2中對應位置的右邊的第乙個比x大的元素。如果不存在,對應位置輸出-1

示例 1:

輸入: nums1 = [4,1,2], nums2 = [1,3,4,2].

輸出: [-1,3,-1]

解釋: 對於 num1 中的數字 4 ,你無法在第二個陣列中找到下乙個更大的數字,因此輸出 -1 。

對於 num1 中的數字 1 ,第二個陣列中數字1右邊的下乙個較大數字是 3 。

對於 num1 中的數字 2 ,第二個陣列中沒有下乙個更大的數字,因此輸出 -1 。

示例 2:

輸入: nums1 = [2,4], nums2 = [1,2,3,4].

輸出: [3,-1]

解釋:  對於 num1 中的數字 2 ,第二個陣列中的下乙個較大數字是 3 。

對於 num1 中的數字 4 ,第二個陣列中沒有下乙個更大的數字,因此輸出 -1 。

class

solution

st.push(0);

for (int i = 1; i < nums2.size(); i++)

st.pop();

}st.push(i);

}return

result;}};

503. 下乙個更大元素 ii

給定乙個迴圈陣列(最後乙個元素的下乙個元素是陣列的第乙個元素),輸出每個元素的下乙個更大元素。數字 x 的下乙個更大的元素是按陣列遍歷順序,這個數字之後的第乙個比它更大的數,這意味著你應該迴圈地搜尋它的下乙個更大的數。如果不存在,則輸出 -1。

示例 1:

輸入: [1,2,1]

輸出: [2,-1,2]

解釋: 第乙個 1 的下乙個更大的數是 2;

數字 2 找不到下乙個更大的數;

第二個 1 的下乙個最大的數需要迴圈搜尋,結果也是 2。

class

solution

st.push(i %size);

}return

res;}};

單調棧 模板 單調棧模板

biu 單調棧主要用於求取左邊第乙個比它大,或者比它小的數。就比如站隊隨便排成一列,可以求到每個人後面第乙個比他高的人。同理可以推廣至右邊,比它矮均可。這就是單調遞增棧 遞減棧,從前至 棧,從後向前入棧的區別了。單調棧比較抽象,非常具有智慧型的想法,可應用的場景相當少,根據幾個經典題目體會它的用法會...

單調佇列 單調棧

參考文章 單調佇列 poj 2823 給定乙個數列,從左至右輸出每個長度為m的數列段內的最小數和最大數。數列長度 n 106 m n n 106,m n n 106 m n 直接暴力求解複雜度在0 mn 可以考慮維護區間最值,單調佇列則是維護區間佇列的強大 單調佇列的定義 單調佇列實現的大致過程 1...

棧和佇列 單調佇列 單調棧

講解部落格鏈結 一 單調棧 1 什麼是單調棧?單調棧是指乙個棧內部元素具有嚴格單調性 單調遞增,單調遞減 的一種資料結構。2 單調棧的兩個性質 滿足從棧頂到棧底具有嚴格的單調性 滿足後進先出的特徵,越靠近棧底的元素越早的進棧。3 元素進棧的過程 對於當前進棧元素x 如果x 棧頂元素,x 進棧。否則 ...