- 解法一利用双栈来求解 一个栈记录的是坐标 一个栈记录的是数据
因为留栈里都是暂时没人比他大的数,所以也就是最外层class Solution { public static int[] dailyTemperatures(int[] T) { //记录value Stack<Integer> stack = new Stack<Integer>(); //记录index Stack<Integer> pro = new Stack<Integer>(); int [] arr = new int [T.length]; if(T.length<=1){ return arr; } pro.add(0); stack.add(T[0]); int i = 1; while(i<T.length&&!stack.empty()) { while (!stack.empty()&&stack.peek() < T[i]) { stack.pop(); int j = pro.pop(); arr[j] = i-j; } stack.push(T[i]); pro.push(i); i++; } return arr; } }
- 区域性记录最大
- 逆序遍历 每个位记录离自己最近且最大的一个数 如果下一次循环(也就是跟下一个位比较时),发现下一个位比自己还要小,则比较它的最近最大的一个数。也就是跳越式查找。
class Solution { public int[] dailyTemperatures(int[] tArr) { int len = tArr.length; int[] ansArr = new int[len]; ansArr[len - 1] = 0; for (int i = len - 2; i >= 0; i--) { if (tArr[i] < tArr[i+1]) { ansArr[i] = 1; continue; } int rightIndex = i + 1 + ansArr[i+1]; while (ansArr[rightIndex] != 0 && tArr[rightIndex] <= tArr[i]) { rightIndex += ansArr[rightIndex]; } ansArr[i] = tArr[rightIndex] > tArr[i] ? rightIndex - i : 0; } return ansArr; } }