[leetCode 丶 20241107] LCR 038. 每日温度
原题: LCR 038.每日温度
主站 739.每日温度.
描述:
请根据每日 气温
列表 temperatures
,重新生成一个列表,要求其对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 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
个人版答案
执行用时: 1703 ms 执行内存消耗: 58.23 M
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int[] res = new int[temperatures.length];
for(int i = 0; i+1 < res.length; i ++){
int next = 0;
boolean has = false;
for(int j = i+1; j < res.length; j ++){
next++;
if(temperatures[j] > temperatures[i]){
has = true;
break;
}
}
if(has){
res[i] = next;
}else{
res[i] = 0;
}
}
res[temperatures.length-1]=0;
return res;
}
}
优秀解法
执行耗时: 8ms
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int len = temperatures.length;
int top = -1;
int[] stack = new int[len];
int[] res = new int[len];
for(int i = 0;i < len;i++){
int t = temperatures[i];
while(top != -1 && t > temperatures[stack[top]]){
res[stack[top]] = i - stack[top];
top--;
}
stack[++top] = i;
}
return res;
}
}
个人解题思路与优秀答案解析
题目分析及个人版思路
- 一眼选择排序, 依次对比一下, 如果大于了就停下, 统计下对比次数
进阶版思路
思路一致, 实现看人家代码.
我不服... 哈哈哈哈~ 看不起for咩~ 我可能是因为多了个判断和后续的写入.但是不要紧, 我考虑的更周密.哈哈哈哈哈哈哈哈
好这题能看懂点了
佬
题目都看不懂
牛牛牛
今日一姥
佬
佬
佬