739. 每日温度
根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高的天数。如果之后都不会升高,请输入 0 来代替。
例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。
提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的都是 [30, 100] 范围内的整数。
直接按逻辑写:
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
vector<int>my_vector;
for(int i=0;i<temperatures.size();i++)
{
#注意这里是<=
for(int s=1;s<=temperatures.size();s++)
{
if((i+s)<temperatures.size()){
if(temperatures[i]<temperatures[i+s])
{
my_vector.push_back(s);
break;
}
}
else{
my_vector.push_back(0);
break;
}
}
}
return my_vector;
}
};
35 / 37 个通过测试用例
状态:超出时间限制
正解:
题意:输入一个数组,代表每天的温度,求解每天需要经过几天会升温,即需找数组每个元素右边第一个比自己大的数。利用单调栈性质创建单调递减栈,遍历数组入栈,当将要入栈元素小于栈顶元素时入栈,若要入栈元素大于栈顶元素时,表示入栈元素为所求元素,记录索引,弹出栈顶元素,将此元素压栈,重新比较,一次循环时间复杂度O(n)。
样例解析:
73入栈,74>73,73出栈,74入栈,74使得73出栈,所以73需要等待1-0=1天 ,栈内元素74.
75入栈,75>74, 74出栈,75入栈,75使得74出栈,所以74需要等待2-1=1天,栈内元素75.
71入栈,71<75,直接入栈,栈内元素 75,71
69直接入栈,栈内元素75,71,69
72入栈,72>69,69出栈,72使69出栈,所以69需要等待5-4=1天,此时栈内元素75,71,由与72>71,任不满足单调栈性质,71出栈,72使71出栈,所以71需要等待5-3=2天,站内元素75,75>72,72直接入栈,栈内元素为:75,72.
以此类推
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
int n=temperatures.size();
vector<int> res(n,0);
stack<int>index_vector;
for(int i=0;i<temperatures.size();i++)
{
while(index_vector.empty()==false && temperatures[i]>temperatures[index_vector.top()])
{
int top=index_vector.top();
index_vector.pop();
res[top]=i-top;
}
index_vector.push(i);
}
return res;
}
};
感谢 :
https://blog.csdn.net/JackZhang_123/article/details/78894769