版权声明:be the one ~you will be the one~~ https://blog.csdn.net/Hqxcsdn/article/details/88180501
题目描述
根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高的天数。如果之后都不会升高,请输入 0 来代替。
例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。
思路
此题大体上说来还是动态规划的基本题型
但是 如果按照一般思路做,会比较不容易找到合适的动态规划方程
此题我们可以从后往前推
对于最后一天,肯定为0,因为他不可能继续增加
对于前面的任意一天,只要和其后面的一天比较,如果小于了 后一天,直接为1,如果大于,则往后遍历,直到找到一天,该温度大于当前的温度,然后记录遍历的次数即可
解答
/**
*
*/
/***
* @author 18071
* @Date 2019年3月4日
* 功能:
* 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高的天数。如果之后都不会升高,请输入 0 来代替。
例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。
***/
public class test {
public static void main(String args[]) {
int[] T = {73, 74, 75, 71, 69, 72, 76, 73};
Solution s= new Solution ();
int []Y= s.dailyTemperatures(T);
for(int i=0;i<Y.length;i++) {
System.out.println(Y[i]);
}
}
}
class Solution {
public int[] dailyTemperatures(int[] T) {
// 解题思路 从后往前 遍历 对于最后一天 肯定为 0
// 对于倒数第二天 如果 比 最后一天 高 为 0,否则为1
/*
* 若T[i] < T[i+1],那么res[i]=1; - 若T[i] > T[i+1] - res[i+1]=0,那么res[i]=0; -
* res[i+1]!=0,那就比较T[i]和T[i+1+res[i+1]](即将第i天的温度与比第i+1天大的那天的温度进行比较)
*/
int[] res = new int[T.length];
res[T.length - 1] = 0;// 必然不会增加
for (int i = T.length - 2; i >= 0; i--) {
if (T[i] < T[i + 1]) {
res[i] = 1;
}
else {
for (int j = i; j < T.length; j++) {
if (T[i] < T[j]) {
res[i] = j - i;
break;
}
else {
res[i]=0;
}
}
}
}
return res;
}
}