Problem: 739. 每日温度
解题方法
方法一:双指针 暴力双重循环 --超时
方法二:单调栈
Code1
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int length = temperatures.length;
int[] ints = new int[length];
if (length == 0) {
return new int[0];
}
//使用双指针
for (int i = 0; i < length; i++) {
int j = i + 1;
int pre = j;
while (j < length) {
if (temperatures[j] <= temperatures[i]) {
//找到第一个比当前温度高的温度时,直接将等待的天数保存到结果数组中,并退出内部循环
ints[i] = j - pre + 1;
break;
} else {
j++;
}
}
}
return ints;
}
}
Code2
class Solution{
public int[] dailyTemperatures(int[] temperatures) {
//单调栈
Stack<Integer> stack = new Stack<>();
int[] ints = new int[temperatures.length];
for (int i = 0; i < temperatures.length; i++) {
if (stack.isEmpty() || temperatures[i] <= temperatures[stack.peek()]) {
// 注意,单调栈里 加入的元素是 下标。
stack.push(i);
}
while (!stack.isEmpty()&&temperatures[i] > temperatures[stack.peek()]) {
ints[stack.peek()] = i - stack.peek();
stack.pop();
}
stack.push(i);
}
return ints;
}
}