给定一个整数数组?temperatures
?,表示每天的温度,返回一个数组?answer
?,其中?answer[i]
?是指对于第?i
?天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用?0
?来代替。
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
stack<int> s;
vector<int> result(temperatures.size(),0);
s.push(0);
for(int i = 1;i<temperatures.size();i++)
{
while(!s.empty()&&temperatures[i]>temperatures[s.top()])
{
result[s.top()] = i - s.top();
s.pop();
}
s.push(i);
}
return result;
}
};
nums1
?中数字?x
?的?下一个更大元素?是指?x
?在?nums2
?中对应位置?右侧?的?第一个?比?x
?大的元素。
给你两个?没有重复元素?的数组?nums1
?和?nums2
?,下标从?0?开始计数,其中nums1
?是?nums2
?的子集。
对于每个?0 <= i < nums1.length
?,找出满足?nums1[i] == nums2[j]
?的下标?j
?,并且在?nums2
?确定?nums2[j]
?的?下一个更大元素?。如果不存在下一个更大元素,那么本次查询的答案是?-1
?。
返回一个长度为?nums1.length
?的数组?ans
?作为答案,满足?ans[i]
?是如上所述的?下一个更大元素?。
class Solution {
public:
vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
stack<int> s;
vector<int> result(nums1.size(),-1);
unordered_map<int, int> umap;
for (int i = 0; i < nums1.size(); i++)
{
umap[nums1[i]] = i;
}
s.push(0);
for(int i = 1;i<nums2.size();i++)
{
while(!s.empty()&&nums2[i]>nums2[s.top()])
{
if (umap.count(nums2[s.top()]) > 0)
{
int index = umap[nums2[s.top()]];
result[index] = nums2[i];
}
s.pop();
}
s.push(i);
}
return result;
}
};