leetcode 503 下乙個更大元素 II

2021-10-22 01:30:36 字數 1320 閱讀 3820

目錄

一、題目內容

二、解題思路

三、**

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

示例 1:

輸入: [1,2,1]

輸出: [2,-1,2]

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

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

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

注意: 輸入陣列的長度不會超過 10000。

將列表nums二次拼接,然後res儲存每個數字下乙個更大的元素,s儲存每個元素的下標;

當前元素(s中棧頂對應的nums元素的下乙個)大於s中棧頂對應的nums元素,res對應的s棧頂下標的下乙個更大的元素為當前元素,s彈出棧頂下標;

s只儲存nums長度的下標,而不是二次拼接之後的陣列下標;

class solution:

def nextgreaterelements(self, nums: list) -> list:

res = [-1 for _ in range(len(nums))]

s =

two_nums = nums + nums

for i in range(len(two_nums)):

while s and nums[s[-1]] < two_nums[i]:

res[s[-1]] = two_nums[i] # 當前元素(s中棧頂對應的nums元素的下乙個)大於s中棧頂對應的nums元素

s.pop() # pop的是下標

# i大於nums的長度了就不往s裡新增下標了

if i < len(nums):

return res

if __name__ == '__main__':

s = solution()

nums = [1, 2, 1]

ans = s.nextgreaterelements(nums)

print(ans)

leetcode503 下乙個更大的元素

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

LeetCode 503 下乙個更大元素II

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

Leetcode 503 下乙個更大元素II

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