一、题目
二、思路
找下一个更大的元素,可以用单调栈实现,本文用单调递减栈(从栈底向栈顶的方向递减)
循环数组,可以用两个数组顺序排列来简化,我们用 i 从 2*nums.size() 开始,从右向左遍历元素,若元素大于栈顶则栈顶需出栈,入栈时记入到 ans 数组中。
三、编码
#include <iostream>
#include<vector>
#include <stack>
using namespace std;
vector<int> nextGreaterElements(vector<int>& nums) {
stack<int> st;
int sz = nums.size();
vector<int> ans(sz);
for (int i = 2 * nums.size() - 1; i >= 0; i--) {
int num = nums[i%sz];
while(!st.empty() && num >= st.top()) {
st.pop();
}
ans[i%sz] = st.empty() ? -1 : st.top();
st.push(num);
}
return ans;
}
int main() {
vector<int> v = {
1,2,3,4,3};
nextGreaterElements(v);
return 0;
}