leetcode 503 下乙個更大元素 II

2022-05-05 10:06:08 字數 1192 閱讀 9367

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

示例 1:

輸入: [1,2,1]

輸出: [2,-1,2]

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

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

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

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

暴力膜,時間複雜度是n*n;

1

class

solution

14 ++j;

15 j = j %len;

16if(j ==i)20}

21}22return

ans;23}

24 };

通過棧的方式來實現,上面的演算法中,有很多的重複遍歷,導致效率不高,對每乙個陣列元素都需要對其後面的元素進行比較,直到找到比他大的元素,這是乙個效率很低的方式

通過棧來實現的思維大致如下:把沒有找到比自己大的元素的指標i壓棧,如果更新的指標i的值比棧頂的值大就把彈出棧

可以這樣理解,壓入棧的指標指向的元素的值是遞減的,當出現比棧中指標指向的元素的值大的元素的時候,把棧中所有滿足條件的值彈出;

用nums = 來解釋

i = 0:    index =;

i = 1:    nums[1] > nums[0] -> ans[0] = nums[1]=4;    index =

i = 2:    index =

i = 3:   nums[3] > nums[2] -> ans[2] = nums[3]=3;  index=

i = 4:   nums[4] > nums[3] -> ans[3] = nums[4]=5; nums[4] > nums[1] -> ans[1] = 5; index=  注意這一步i=4之前所有的比nums[4]小的都找到了比自己大的數

1

class

solution

12index.push(i);13}

14return

ans;15}

16 };

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 解釋 第乙個 ...