[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; } }

个人解题思路与优秀答案解析

题目分析及个人版思路

  1. 一眼选择排序, 依次对比一下, 如果大于了就停下, 统计下对比次数

进阶版思路
思路一致, 实现看人家代码.

我不服... 哈哈哈哈~ 看不起for咩~ 我可能是因为多了个判断和后续的写入.但是不要紧, 我考虑的更周密.哈哈哈哈哈哈哈哈