739每日温度

739每日温度

下面是给出的代码

1
2
3
4
5
6
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& T) {

}
};

我拿到必用BF

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& T) {
int n = T.size();
vector<int>v(n,0);
stack<int>st;
for(int i = 0;i<n;i++)
{
//每次拿到一个i,往后遍历找到比它大的值,然后记录
for(int j = i;j<n;j++)
{
if(T[j]>T[i])
{
v[i] = j-i;
break;
}
}
}
return v;
}
};
  • 但是很可惜,超出了时间限制

所以用递减栈来试试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& T) {
int n = T.size();
vector<int>v(n,0);
stack<int>s;
for(int i= 0;i<n;i++)
{
//栈内存储的是序号,做差获得答案
while(!s.empty()&&T[i]>T[s.top()])
{
int temp = s.top();
s.pop();
v[temp] = i-temp;
}
s.push(i);
}
return v;
}
};
-------------本文结束,感谢您的阅读-------------