739 每日温度

cpp
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
vector<int> answers(temperatures.size(),0);
stack<int> st;
for(int i = 0;i < temperatures.size();i++){
while(!st.empty() && temperatures[i] > temperatures[st.top()]){
answers[st.top()] = i - st.top();
st.pop();
}
st.push(i);
}
return answers;
}
};
496 下一个更大元素 I

cpp
class Solution {
public:
vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
vector<int> answer(nums1.size(),-1);
stack<int> st;
unordered_map<int,int> mp;
for(int i = 0;i < nums1.size();i++){
mp[nums1[i]] = i;
}
for(int i = 0;i < nums2.size();i++){
while(!st.empty() && nums2[i] > st.top()){
if(mp.find(st.top()) != mp.end()) answer[mp[st.top()]] = nums2[i];
st.pop();
}
st.push(nums2[i]);
}
return answer;
}
};
503 下一个更大元素 II

cpp
class Solution {
public:
vector<int> nextGreaterElements(vector<int>& nums) {
vector<int> answer(nums.size(),-1);
stack<int> st;
for(int i = 0; i < 2 * nums.size();i++){
while(!st.empty() && nums[i%nums.size()] > nums[st.top()]){
answer[st.top()] = nums[i%nums.size()];
st.pop();
}
st.push(i%nums.size());
}
return answer;
}
};