JAVA练习345- 每日温度
2026/7/24 20:07:27 网站建设 项目流程

题目概览

给定一个整数数组temperatures,表示每天的温度,返回一个数组answer,其中answer[i]是指对于第i天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用0来代替。

示例 1:

输入:temperatures = [73,74,75,71,69,72,76,73]输出:[1,1,4,2,1,1,0,0]

示例 2:

输入:temperatures = [30,40,50,60]输出:[1,1,1,0]

示例 3:

输入:temperatures = [30,60,90]输出:[1,1,0]

提示:

  • 1 <= temperatures.length <= 10^5
  • 30 <= temperatures[i] <= 100

来源:739. 每日温度 - 力扣(LeetCode)

解题分析

方法:单调栈

我们可以维护一个单调递减的栈,当当前元素大于栈顶元素时,就将小于当前元素的元素出栈,此时当前元素一定是第一个大于出栈元素的,出栈元素对应的answer 就是当前索引 - 该元素对应的索引。

时间复杂度:O(n)
空间复杂度:O(n)

class Solution { public int[] dailyTemperatures(int[] temperatures) { int n = temperatures.length; int[] res = new int[n]; Deque<Integer> dq = new LinkedList<>(); for (int i = 0; i < n; ++i) { int temp = temperatures[i]; while(!dq.isEmpty() && temperatures[dq.peek()] < temp) { int top = dq.pop(); res[top] = i - top; } dq.push(i); } return res; } }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询