1、題目數組
一、審題spa
二、分析code
給出一個記錄溫度的數組。輸出當前溫度距離下一次升溫的下標距離。blog
2、解答class
方法1、遍歷
採用一個 dp 數組,從後往前填值。(i < j)方法
若 dp[i] < dp[j], 則 dp[i] = j - i;im
若 dp[i[ >= dp[j] 則 j = j + dp[j]img
public int[] dailyTemperatures(int[] T) { int[] dp = new int[T.length]; for (int i = T.length - 2; i >= 0; i--) { for (int j = i + 1; j < dp.length;) { if(T[i] < T[j]) { dp[i] = j - i; break; } else { if(dp[j] == 0) break; j = j + dp[j]; } } } return dp; }
方法2、di
採用一個棧來計算下一次的升溫距離。從前向後遍歷:
public int[] dailyTemperatures2(int[] T) { Stack<Integer> stack = new Stack<>(); int[] ret = new int[T.length]; for (int i = 0; i < ret.length; i++) { while(!stack.isEmpty() && T[i] > T[stack.peek()]) { int idx = stack.pop(); ret[idx] = i - idx; } stack.push(i); } return ret; }