题目描述
解法 单调栈
思路如注释
class Solution {
public:
//思路:
//维护一个单调递减的栈,里面存放元素下标
//遍历数组,发现当前元素大于栈里面元素,说明当前元素是这些元素的下一个更大元素
//将这些比较小的元素出栈,他们的下一个更大的数就是当前元素。
vector<int> nextGreaterElements(vector<int>& nums) {
int len = nums.size();
stack<int> s;
vector<int> ans(len, - 1);
//入栈的思路还是一直入栈直到出现一个大于元素后尝试出栈
for(int i = 0; i < 2 * len - 1; i++) {
//出现一个大于栈顶的元素
while(!s.empty() && nums[s.top()] < nums[i % len]) {
ans[s.top()] = nums[i % len];
s.pop();
}
s.push(i % len);
}
return ans;
}
};