請根據每日 氣溫 列表 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;}
}
代碼二我不李姐,看了好久才模仿寫出來