- 解法一利用双栈来求解 一个栈记录的是坐标 一个栈记录的是数据
因为留栈里都是暂时没人比他大的数,所以也就是最外层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;
}
}
京公网安备 11010502036488号