题解 | #每日温度#
每日温度
http://www.nowcoder.com/practice/1f54e163e6944cc7b8759cc09e9c78d8
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 每日温度
* @param dailyTemperatures int整型一维数组
* @return int整型一维数组
*/
// 单调栈: 如果题目的要求是,求某一个位置的左右两侧,离它最近比它大的数,那么栈底到栈顶是从大到小的。(栈中存放的是下标,而不是数本身)
// 如果新来的一个数,破化了栈的单调性,那么就依次弹出栈中的元素,弹出的元素的右侧离它最近的元素就是当前数。(无论任何时候,栈都要保持单调性)
public int[] temperatures (int[] dailyTemperatures) {
// write code here
Stack<Integer> stack = new Stack<>();
int[] res = new int[dailyTemperatures.length];
for (int i = 0; i < dailyTemperatures.length; i++) {
int val = dailyTemperatures[i];
while (!stack.isEmpty() && dailyTemperatures[stack.peek()] < val) {
int index = stack.pop(); // 下标
res[index] = i - index;
}
stack.push(i);
}
while (!stack.isEmpty()) {
int index = stack.pop(); // 下标
res[index] = 0;
}
return res;
}
}