503 下乙個更大元素 II (單調棧)

2021-10-21 07:22:07 字數 715 閱讀 7733

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

示例1:

輸入: [1,2,1]

輸出: [2,-1,2]

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

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

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

要找下乙個最大的數,就是找所有遞增的子串行,而遞減的子串行的下乙個最大值,是破環它們遞減的第乙個值

所有利用到單調棧,隨時維護單調棧的單調性,保證裡面是乙個單調不公升的序列,當遇到破環單調不公升的值,便將所有小於這個值的元素出棧。

因為是迴圈陣列,所以迴圈兩邊(相當於複製整個陣列在後面)

class

solution

stack.

push

(i%n)

;//元素入棧

}return res;

}}

時間複雜度: o(n),其中 n 是序列的長度。我們需要遍歷該陣列中每個元素最多 2 次,每個元素出棧與入棧的總次數也不超過 4 次。

空間複雜度: o(n),其中 n 是序列的長度。空間複雜度主要取決於棧的大小,棧的大小至多為 2n-1。

503 下乙個更大元素 II

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

503 下乙個更大元素 II

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

503 下乙個更大元素 II

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