请根据每日 气温 列表 temperatures ,请计算在每一天需要等几天才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 0 来代替。
代码一
单调栈
class Solution {public int[] dailyTemperatures(int[] temperatures) {int length = temperatures.length;int[] res = new int[length];Stack<Integer> stack = new Stack<>();for(int i = 0;i<length;i++){while(!stack.isEmpty()&&temperatures[i]>temperatures[stack.peek()]){//int temp = i;res[stack.peek()] = i-stack.pop();}stack.push(i);}return res;}
}
代码二
动态规划,res[i]和res[i+1]有关系
class Solution {public int[] dailyTemperatures(int[] temperatures) {int[] res = new int[temperatures.length];int length = temperatures.length;//从后面开始,动态规划for(int i = length-2;i>=0;i--){int j = i+1;while(j<length){if(temperatures[i]<temperatures[j]){//最简单的情形,直接找到res[i] = j-i;break;}else if(res[j] == 0){//第j个元素之后没有比它更大的break;}else{//第j+res[j]个元素之后有比它更大的,在进一步比较j = j+res[j];}}}return res;}
}
代码二我不李姐,看了好久才模仿写出来