739. 每日温度
739. 每日温度
给定一个整数数组 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
思路:
该题目主要搞清楚,temperatures = [73,74,75,71,69,72,76,73],然后输出了[1,1,4,2,1,1,0,0],搞清楚原因,其实也很简单,就是找该数组中后面有没有比当前元素温度大的一天,如果出现了,两个的天数之差就是两者相减的结果,因此就有了第一种解法,相当简单和容易理解的解法,
解法一:
创建一个新的数组,然后把传入的数组中元素进行比较,当遍历当中出现了比目标值温度更大的一天就保存两天的天数之差,跳出当前循环,进行下一个元素的遍历,最后返回这个用于保存数据的数组
java :
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int[] temp = new int[temperatures.length];
boolean flag = false;
// simple sort
for(int i = 0; i < temperatures.length; i++){
for(int j = i + 1; j < temperatures.length; j++){
if(temperatures[i] < temperatures[j]){
temp[i] = j - i;
flag = true;
break; // 不需要把所有数据都进行比较,当出现目标值时,就可以跳出这个for循环
}
}
if(!flag){
temp[i] = 0;
}
}
return temp;
}
}
解法二: 单调栈
前一种解决很简单,但是时间开销太大了,O(n^2),为了节约时间开销,我们就使用一种新的方式,使用栈来做,(当然这道题本来就是有栈标签的),我们使用第一个例子来说明该算法的思想
[73,74,75,71,69,72,76,73]
第一步: 创建栈 stack,和数组 res用于存储结果 然后 先对栈进行判断 stack.isEmpty() 0:73 入栈, 0 : 是73的下标
第二步: 1 : 74 进入判断 73 < 74 (temperatures[i] > temperatures[stack.peek()]) 所以 0 : 73 出栈 同时 res[0] = 1 - 0 = 1
第三步:1 : 74 入栈
第四步:2 : 75 进入判断 74 < 75 (temperatures[i] > temperatures[stack.peek()]) 所以 1 : 74 出栈 同时 res[1] = 2 - 1 = 1
。。。。。
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
Stack<Integer> stack = new Stack<>();
int[] res = new int[temperatures.length];
for(int i = 0; i < temperatures.length; i++){
while(!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()]){
int temp = stack.pop();
res[temp] = i - temp;
}
stack.push(i); // 栈中存储的是下标
}
return res;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)