[leetCode 丶 20241107] LCR 038. 每日温度
原题:
https://leetcode.cn/problems/iIQa4I/description/
主站
https://leetcode-cn.com/problems/daily-temperatures/
.
描述:
请根据每日 气温
列表 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咩~ 我可能是因为多了个判断和后续的写入.但是不要紧, 我考虑的更周密.哈哈哈哈哈哈哈哈
好这题能看懂点了
佬
题目都看不懂
牛牛牛
今日一姥
佬
佬
佬