class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
stack<int> st; //存储下标。
int n=temperatures.size();
vector<int> res(n,0);
for(int i=0;i<n;i++){
while(st.size()&& temperatures[st.top()]<temperatures[i]){
res[st.top()] = i-st.top(); //当前第一个更高温度的下标-数字原下标
st.pop();
}
st.push(i); //没有找到数字,先把下标存储下来。
}
return res;
}
};
class Solution {
public:
vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
stack <int> st;
int n = nums1.size();
vector<int> res(n,-1);
unordered_map<int,int> map;
for(int i=0;i<n;i++){
map[nums1[i]]=i;
}
for(int i=0;i<nums2.size();i++){
while(st.size()&&nums2[st.top()]<nums2[i]){
if(map.count(nums2[st.top()])){ //在nums1有这个数
int index = map[nums2[st.top()]]; //找到这个数在num1中下标
res[index] = nums2[i]; //保存结果
}
st.pop(); //退栈
}
st.push(i);
}
return res;
}
};