Leetcode 503 下一個更大元素
阿新 • • 發佈:2022-03-27
Leetcode 503 下一個更大元素
503. 下一個更大元素 II
難度中等582
給定一個迴圈陣列 nums
( nums[nums.length - 1]
的下一個元素是 nums[0]
),返回 nums
中每個元素的 下一個更大元素 。
數字 x
的 下一個更大的元素 是按陣列遍歷順序,這個數字之後的第一個比它更大的數,這意味著你應該迴圈地搜尋它的下一個更大的數。如果不存在,則輸出 -1
。
示例 1:
輸入: nums = [1,2,1] 輸出: [2,-1,2] 解釋: 第一個 1 的下一個更大的數是 2; 數字 2 找不到下一個更大的數; 第二個 1 的下一個最大的數需要迴圈搜尋,結果也是 2。
示例 2:
輸入: nums = [1,2,3,4,3]
輸出: [2,3,4,-1,4]
提示:
1 <= nums.length <= 104
-109 <= nums[i] <= 109
題解:
這顯然是一道單調佇列題目,關於單調佇列的套路是:只要題目要求尋找一個數的下一個更大的數(更小的數)就可以使用單調棧的技巧,具體的用法可以看[單調棧結構解決三道演算法題 :: labuladong的演算法小抄 (gitee.io)](https://labuladong.gitee.io/algo/2/22/62/)
給出程式碼:
class Solution { public: vector<int> nextGreaterElements(vector<int>& nums) { vector<int> res=getNextGreater(nums); return res; } vector<int> getNextGreater(vector<int>& nums){ int n=nums.size(); vector<int> res(n); stack<int> s; for(int i=2*n-1;i>=0;i--){ while(!s.empty()&&nums[i%n]>=s.top()){ s.pop(); } res[i%n]= s.empty()?-1:s.top(); s.push(nums[i%n]); } return res; } };