从T数组最后往前遍历求res数组的值。
通过分析得到如下结论:
情况1::最简单的一种情况,T[i]<T[i+1],res[i]=1.
情况2:T[i]==T[i+1],此时分为两种情况,如果T[i+1]后没有比他更大的(即res[i+1]==0),那么res[i]=0.如果res[i+1]!=0,那么i+1项经过的天数加一就是结果。
情况三:如果T[i]>T[i+1],首先查看res[i+1]是否为0,为0则res[i]也为0。否则,通过res[i+1]找到下一个比T[i+1]大的数,进行比较,判断是否为0,直到找到比T[i]大的那一项,或者找到了res为0的那一项(此时res[i]=0)。
为了方便查找,设置起始值为i+1的变量s,和T[i]比较的值的下标,通过式子s=res[s]+s迭代。
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& T) {
vector<int> res;
int n=T.size();
res.resize(n);
res[n-1]=0;
for(int i=n-2;i>=0;i--){
if(T[i]>T[i+1]){
if(res[i+1]==0)
res[i]=0;
else{
int s=i+1;
while(1){
//cout<<"i="<<i<<' '<<"s="<<T[s]<<endl;
s=res[s]+s;
if(T[i]<T[s])
{
res[i]=s-i;
break;
}
else if(T[i]==T[s]){
if(res[s]==0)
res[i]=0;
else
res[i]=s-i+res[s];
break;
}
else{
if(res[s]==0){
res[i]=0;
break;
}
}
}
}
}
else if(T[i]==T[i+1]){
if(res[i+1]==0)
res[i]=0;
else
res[i]=1+res[i+1];
}
else
res[i]=1;
}
return res;
}
};