letcode 每日温度 dp

版权声明: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;

	}
}

猜你喜欢

转载自blog.csdn.net/Hqxcsdn/article/details/88180501
今日推荐