题目地址:LeetCode 739.每日温度
1.问题思路
这里可以使用双指针思路,代码较为简单这里不进行阐述。除了双指针外,还可以使用单调栈的思想。
首先声明一个新数组result, 并声明一个单调递增栈(这里找第一个比当前栈顶元素大的,所以使用递增栈)。
- 如果循环判断当前栈不为空,且栈顶元素小于当前遍历temperatures[i],则进行弹栈,弹出元素记为topIndex。则result[topIndex] = topIndex - i;
- 将当前遍历元素进行压栈。
2.代码实现
1)单调栈
public int[] dailyTemperatures(int[] temperatures) {
int[] result = new int[temperatures.length];
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < temperatures.length; i++) {
// 遇到更高温度,则进行记录
while (!stack.isEmpty() && temperatures[stack.peek()] < temperatures[i]) {
Integer topIndex = stack.pop();
result[topIndex] = i - topIndex;
}
stack.push(i);
}
return result;
}
- 双指针
public int[] dailyTemperaturesBy2Point(int[] temperatures) {
for (int leftPoint = 0; leftPoint < temperatures.length; leftPoint++) {
int nextLargeDays = 0;
for (int rightPoint = leftPoint; rightPoint < temperatures.length; rightPoint++) {
if (temperatures[rightPoint] > temperatures[leftPoint]) {
nextLargeDays = rightPoint - leftPoint;
break;
}
}
temperatures[leftPoint] = nextLargeDays;
}
return temperatures;
}
896

被折叠的 条评论
为什么被折叠?



