1. 程式人生 > 其它 >【力扣】 503. 下一個更大元素 II

【力扣】 503. 下一個更大元素 II

503. 下一個更大元素 II

給定一個迴圈陣列 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

來源:力扣(LeetCode)
連結:https://leetcode.cn/problems/next-greater-element-ii
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

程式碼實現:

class Solution {
public:
    vector<int> nextGreaterElements(vector<int>& nums) {
        int n=nums.size();
        vector<int>res(n,-1);
        stack<int>stk;
        for (int i=0;i<n*2;i++)
        {
                while(!stk.empty()&&nums[i%n]>nums[stk.top()])
                {
                    int j=stk.top();
                    stk.pop();
                    res[j]=nums[i%n];
                }
                stk.push(i%n);  
        }
        return res;
    }
};