LeetCode刷题实战503:下一个更大元素 II
Given a circular integer array nums (i.e., the next element of nums[nums.length - 1] is nums[0]), return the next greater number for every element in nums.
The next greater number of a number x is the first greater number to its traversing-order next in the array, which means you could search circularly to find its next greater number. If it doesn't exist, return -1 for this number.
示例
输入: [1,2,1]
输出: [2,-1,2]
解释: 第一个 1 的下一个更大的数是 2;
数字 2 找不到下一个更大的数;
第二个 1 的下一个最大的数需要循环搜索,结果也是 2。
注意: 输入数组的长度不会超过 10000。
解题
class Solution {
public:
vector<int> nextGreaterElements(vector<int>& nums) {
vector<int>res(nums.size(),0);
stack<int> st;
//使用单调栈第一次遍历
for(int i=nums.size()-1;i>=0;--i){
while(!st.empty()&&st.top()<=nums[i]){
st.pop();
}
st.push(nums[i]);
}
//使用单调栈第二次遍历,保存相关的结果
for(int i=nums.size()-1;i>=0;--i){
while(!st.empty()&&st.top()<=nums[i]){
st.pop();
}
if(st.empty()){
res[i]=-1;
}
else{
res[i]=st.top();
}
st.push(nums[i]);
}
return res;
}
};
评论