1. 程式人生 > 實用技巧 >Combiner-Reduce之前處理過程

Combiner-Reduce之前處理過程

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

示例 1:

輸入: [1,2,1]
輸出: [2,-1,2]
解釋: 第一個 1 的下一個更大的數是 2;
數字 2 找不到下一個更大的數;
第二個 1 的下一個最大的數需要迴圈搜尋,結果也是 2。


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

思路:單調棧。

程式碼:

class Solution {
public:
    vector<int> nextGreaterElements(vector<int
>& nums) { int len = nums.size(), i, current; vector<int> result(len, -1); stack<int> st; for(i = 0; i < len; i++) { while(!st.empty()) { current = st.top(); if(nums[current]<nums[i]) { result[current]
= nums[i]; st.pop(); } else break; } st.push(i); } for(i = 0; i < len-1; i++) { while(!st.empty()) { current = st.top(); if
(nums[current]<nums[i]) { result[current] = nums[i]; st.pop(); } else break; } st.push(i); } return result; } };