503. 下一个更大元素 II - 力扣(LeetCode)
状态:查看思路后AC。
和每日温度一样,区别在于走两边数组,代码如下:
class Solution {
public:
vector<int> nextGreaterElements(vector<int>& nums) {
int len = nums.size();
vector<int> res(len, -1);
stack<int> st;
for(int i = 0; i < len * 2; ++i){
while(!st.empty() && nums[i % len] > nums[st.top()]){
res[st.top()] = nums[i % len];
st.pop();
}
st.push(i % len);
}
return res;
}
};
状态:没思路。
利用了单调栈找寻某一侧第一个最大/小值的特性,增加了对新增元素较栈顶元素大时的计算处理,代码如下:
class Solution {
public:
vector<int> nextGreaterElements(vector<int>& nums) {
int len = nums.size();
vector<int> res(len, -1);
stack<int> st;
for(int i = 0; i < len * 2; ++i){
while(!st.empty() && nums[i % len] > nums[st.top()]){
res[st.top()] = nums[i % len];
st.pop();
}
st.push(i % len);
}
return res;
}
};