給定乙個迴圈陣列(最後乙個元素的下乙個元素是陣列的第乙個元素),輸出每個元素的下乙個更大元素。數字 x 的下乙個更大的元素是按陣列遍歷順序,這個數字之後的第乙個比它更大的數,這意味著你應該迴圈地搜尋它的下乙個更大的數。如果不存在,則輸出 -1。
示例:
輸入: [1,2,1]
輸出: [2,-1,2]
解釋: 第乙個 1 的下乙個更大的數是 2;
數字 2 找不到下乙個更大的數;
第二個 1 的下乙個最大的數需要迴圈搜尋,結果也是 2。
輸入:[5,4,3,2,1]
輸出:[-1,5,5,5,5]
整體使用單調棧來做,如果陣列不是迴圈陣列,那麼遍歷一遍就行了。但是,陣列是迴圈陣列,這意味著某個元素的下乙個更大元素可能出現在該元素的前面,例如輸入[5,4,3,2,1]
,輸出[-1,5,5,5,5]
。這種問題有兩種解法,一種是直接將原陣列複製乙份放到原陣列後面,例如[5,4,3,2,1]
變為[5,4,3,2,1,5,4,3,2,1]
,然後遍歷一遍,但是入棧的時候只考慮下標小於 n 的元素(n 為原陣列長度),但這樣會增加空間複雜度。
還有一種做法就是不顯式地擴充套件陣列,而是在遍歷的時候將範圍 [0, n) 變為 [0, 2n),假設當前下標為 i,判斷 nums[i%n] 和棧頂元素的關係,當 inextgreaterelements(vector& nums) ;
stacks;
int n = nums.size();
vectorans(n, -1);
for(int i=0; inums[s.top()])
if(i下面是更簡潔的寫法:
class solution ;
stacks;
int n = nums.size();
vectorans(n, -1);
for(int i=0; inums[s.top()])
if(icomments/92706
LeetCode 下乙個更大元素 I
給定兩個沒有重複元素的陣列nums1和nums2,其中nums1是nums2的子集。找到nums1中每個元素在nums2中的下乙個比其大的值。nums1中數字x的下乙個更大元素是指x在nums2中對應位置的右邊的第乙個比x大的元素。如果不存在,對應位置輸出 1。示例 1 輸入 nums1 4,1,2...
leetcode 下乙個更大元素 I
給定兩個沒有重複元素的陣列 nums1 和 nums2 其中nums1 是 nums2 的子集。找到 nums1 中每個元素在 nums2 中的下乙個比其大的值。nums1 中數字 x 的下乙個更大元素是指 x 在 nums2 中對應位置的右邊的第乙個比 x 大的元素。如果不存在,對應位置輸出 1 ...
LeetCode下乙個更大元素 II
力扣503.題目給定乙個迴圈陣列,輸出每個元素的下乙個更大元素。數字 x 的下乙個更大的元素是按陣列遍歷順序,這個數字之後的第乙個比它更大的數,這意味著你應該迴圈地搜尋它的下乙個更大的數。如果不存在,則輸出 1。注意 輸入陣列的長度不會超過 10000。public class main else ...