739. 每日温度
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
int n = temperatures.size();
vector<int> answer(n);
stack<int> stk; // 维持一个单调栈
for(int i = 0; i < n; i++){
while(!stk.empty() && temperatures[i] > temperatures[stk.top()]){
answer[stk.top()] = i - stk.top();
stk.pop();
}
stk.push(i);
}
return answer;
}
};
496.下一个更大元素 I
class Solution {
public:
vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
int n1 = nums1.size(), n2 = nums2.size();
stack<int> st;
vector<int> ans;
unordered_map<int, int> mp;
for(int i = n2 - 1; i >= 0; --i){
int num = nums2[i];
while(!st.empty() && num >= st.top()){ // 找到nums2[i]后的第一个大值
st.pop();
}
mp[num] = st.empty()? -1 : st.top();
st.push(num);
}
for(int i = 0; i < n1; i++){
ans.push_back(mp[nums1[i]]);
}
return ans;
}
};
503.下一个更大元素II
503. 下一个更大元素 II - 力扣(LeetCode)
class Solution {
public:
vector<int> nextGreaterElements(vector<int>& nums) {
int n = nums.size();
stack<int> stk; // 栈底大于栈顶,储存下标
vector<int> ans(n, -1);
for(int i = 0; i < 2 * n - 1; i++){
while(!stk.empty() && nums[stk.top()] < nums[i % n]){
ans[stk.top()] = nums[i % n];
stk.pop();
}
stk.push(i % n);
}
return ans;
}
};