原題指路
下乙個更大元素 ii
給定乙個迴圈陣列(最後乙個元素的下乙個元素是陣列的第乙個元素),輸出每個元素的下乙個更大元素。數字 x 的下乙個更大的元素是按陣列遍歷順序,這個數字之後的第乙個比它更大的數,這意味著你應該迴圈地搜尋它的下乙個更大的數。如果不存在,則輸出 -1。
emmmmmm首先吐槽一下本題的中文題幹,看不懂什麼意思的建議直接看英文題幹。
這道題用到的方法為單調棧+迴圈陣列。
單調棧:棧底到棧頂是單調的。
這道題需要在遍歷迴圈陣列的同時維護乙個單調遞減棧:
時間複雜度:o(n
)o(n)
o(n)
空間複雜度:o(n
)o(n)
o(n)
class
solution
:def
nextgreaterelements
(self, nums: list[
int])-
> list[
int]
: length =
len(nums)
res =[-
1]*length # 初始化答案陣列為-1
st =
# 建立乙個空棧用以儲存陣列下標
for i in
range
(length*2-
1):# 通過遍歷兩次陣列(取模)來模擬迴圈陣列
while st and nums[st[-1
]]< nums[i % length]
:# 當棧不空且棧頂元素小於當前元素時將當前元素出棧並修改答案陣列
res[st.pop()]
= nums[i % length]
# 每次都要令當前元素入棧
return res
下乙個更大元素 II
棧內儲存的是單調不遞增的陣列下標,當指向元素大於棧頂對應的陣列元素,出棧並且結果陣列對應的位置賦值為指向元素。class solution public int nextgreaterelements int nums int numslen nums.length int res new int ...
LeetCode下乙個更大元素 II
力扣503.題目給定乙個迴圈陣列,輸出每個元素的下乙個更大元素。數字 x 的下乙個更大的元素是按陣列遍歷順序,這個數字之後的第乙個比它更大的數,這意味著你應該迴圈地搜尋它的下乙個更大的數。如果不存在,則輸出 1。注意 輸入陣列的長度不會超過 10000。public class main else ...
503 下乙個更大元素 II
題目 給定乙個迴圈陣列 最後乙個元素的下乙個元素是陣列的第乙個元素 輸出每個元素的下乙個更大元素。數字 x 的下乙個更大的元素是按陣列遍歷順序,這個數字之後的第乙個比它更大的數,這意味著你應該迴圈地搜尋它的下乙個更大的數。如果不存在,則輸出 1。示例 1 輸入 1,2,1 輸出 2,1,2 解釋 第...