レベル:
中
件名の説明:
毎日の温度のリストを考えるとT
、そのようなことをリストを返す、入力中に毎日のために、あなたは暖かい温度になるまで待たなければならない日数を示します。これが可能ないかなる将来の日がない場合は、置く0
代わりに。
例えば、温度のリストを与えT = [73, 74, 75, 71, 69, 72, 76, 73]
、あなたの出力がなければなりません[1, 1, 4, 2, 1, 1, 0, 0]
。
注意:の長さはtemperatures
範囲内であろう[1, 30000]
。各温度範囲の整数であろう[30, 100]
。
アイデアの分析:
スタックが空である場合、日数およびその温度の日に対応するスタック要素に格納されたスタックを、設定温度アレイを横切る、第一日目の日、すなわち、添え字の数とスタックに対応する温度、およびその後決定します素子の温度が先頭の要素の温度よりも大きい場合は、後に、もしそうなら、ポップアップ要素とポップアップ要素の結果として保存され、現在の要素との間の日差の数を取得するには、トップの要素をポップ、スタックに現在の要素を担当し、ダウン進みますトラバーサル。
コード:
public class Solution{
public int []dailyTemperatures(int []T){
Stack<int []>s=new Stack<>();//存放下标和其对应的温度
int []res=new int [T.length];
for(int i=0;i<T.length;i++){
while(!s.isEmpty()&&s.peek()[1]<T[i]){
int []temp=s.pop();
res[temp[0]]=i-temp[0];//相差的天数
}
s.push(new int[]{i,T[i]});
}
return res;
}
}