Leetcode面试经典150题-739.每日温度

server/2024/9/21 4:17:57/

应读者私信要求,本题协商题目的具体内容

给定一个整数数组 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]

其他的就不多说了,上代码,看不懂的请留言或者私信,收到第一时间解答

class Solution {/**题目是再简单不过的单调栈问题,而且和我们以前单调栈不同的是,这个只是求后面的所以我们只需要定义一位数组就可以了,其他的边写边解释吧这里要特别注意的是题目求的是下一个更高温出现在几天后,而不是出现在第几天,这明显就是一个陷阱解题的时候千万注意 */public int[] dailyTemperatures2(int[] temperatures) {/**如果就给了一天,那没有后面的天了,按题目要求返回0 */if(temperatures.length == 1) {return new int[]{0};}/**定义结果数组*/int[] ans = new int[temperatures.length];/**定义单调栈,栈里放的元素从底到顶越来越小,如果出现更大的就把栈里比它小的全部弹出注意栈里放的是下标*/Stack<Integer> minStack = new Stack<>();minStack.push(0);for(int i = 0; i < temperatures.length; i++) {while(!minStack.isEmpty() && temperatures[minStack.peek()] < temperatures[i]) {/**比它小的都弹出*/int popIndex = minStack.pop();/**是因为i的出现导致了popIndex位置的数弹出,所以i是右边第一个比它大的 */ans[popIndex] = i - popIndex;}minStack.push(i);/**次数比之前单调栈的问题简答的是不用再把栈里的弹空算每个对应的值,因为剩下的都是大的,右边没有比他大的题目规定没有比他大的就写0,所以这里直接省略了 */}return ans;}/**题目有点恶心,竟然只战胜40%的人,但是时间复杂度确实是O(n),我这里突然纠结了一下决定给他改了,不就是因为用了系统的栈吗我不用还不行吗 */public int[] dailyTemperatures(int[] temperatures) {/**如果就给了一天,那没有后面的天了,按题目要求返回0 */if(temperatures.length == 1) {return new int[]{0};}/**定义结果数组*/int[] ans = new int[temperatures.length];/**定义单调栈,栈里放的元素从底到顶越来越小,如果出现更大的就把栈里比它小的全部弹出注意栈里放的是下标*/int[] minStack = new int[temperatures.length];minStack[0] = 0;/**栈目前的有效长度 */int validLen = 1;for(int i = 0; i < temperatures.length; i++) {while(validLen != 0 && temperatures[minStack[validLen - 1]] < temperatures[i]) {/**比它小的都弹出*/int popIndex = minStack[--validLen];/**是因为i的出现导致了popIndex位置的数弹出,所以i是右边第一个比它大的 */ans[popIndex] = i - popIndex;}minStack[validLen++] = i;/**次数比之前单调栈的问题简答的是不用再把栈里的弹空算每个对应的值,因为剩下的都是大的,右边没有比他大的题目规定没有比他大的就写0,所以这里直接省略了 */}return ans;}
}

本来就是最优解了,但是竟然让我超过了40%的人,今天我是看不多去了,直接在常数时间了又改进了一把,也许仅此一次,下次不搞了,毕竟我们做算法看时间复杂度和空间复杂度,不看常数时间,非重点公司,我都懒得给他们改 

这结果面试官大哥满意吗。。。 


http://www.ppmy.cn/server/119647.html

相关文章

激发AI创造力:掌握Prompt提示词的高效提问方法

AI内容创作的核心&#xff1a;提示词Prompt 在AI内容创作中&#xff0c;提示词&#xff08;Prompt&#xff09;是关键因素&#xff0c;能有效引导AI生成高质量、符合预期的内容。通过合理组织提示词&#xff0c;创作者可以大幅提升AI输出的准确性和专业度。掌握提示词的编写技…

MATLAB画图,曲线图如何绘制美观,曲线图10种美化方法

曲线图是比较常用的图形&#xff0c;本文以二维曲线图为例&#xff0c;展示曲线的图的不同美化方法&#xff0c;如图1所示&#xff0c;是一个标准的曲线图&#xff0c;横坐标为x&#xff0c;纵坐标为y, 图1 标准曲线图 调整方法1 首先可以通过改变线的颜色&#xff0c;不同…

.net core 通过Sqlsugar生成实体

通过替换字符串的方式生成代码&#xff0c;其他代码也可以通这种方式生成 直接上代码 设置模板 将这几个模板文件设置为&#xff1a;嵌入资源 模板内容&#xff1a; using SqlSugar;namespace {Namespace}.Domain.Admin.{ModelName}; /// <summary> /// {TableDisplay…

Gitea Action 简单配置(CI/CD)

线上pipeline,&#xff08;我使用是本地仓库的&#xff0c;你们使用切换成官网的即可&#xff09; # 工作流的名称name: Build and Push Docker Image deployment-k8s# 触发条件&#xff0c;只在 master 或 main 分支发送推送时触发 on:push:branches:- main# 作业&#xff0c…

css百分比布局中height:100%不起作用

百分比布局时&#xff0c;我们有时候会遇到给高度 height 设置百分比后无效的情况&#xff0c;而宽度设置百分比却是正常的。 当为一个元素的高度设定为百分比高度时&#xff0c;是相对于父元素的高度来计算的。当没有给父元素设置高度&#xff08;height&#xff09;时或设置…

【JAVA入门】Day48 - 线程池

【JAVA入门】Day48 - 线程池 文章目录 【JAVA入门】Day48 - 线程池一、线程池的主要核心原理二、自定义线程池三、线程池的大小 我们之前写的代码都是&#xff0c;用到线程的时候再创建&#xff0c;用完之后线程也就消失了&#xff0c;实际上这是不对的&#xff0c;它会浪费计算…

qwen2.5 vllm推理;openai function call调用中文离线agents使用

参考: https://qwenlm.github.io/zh/blog/qwen2.5/ https://qwen.readthedocs.io/zh-cn/latest/framework/function_call.html#vllm 安装: pip install -U vllm -i https://pypi.tuna.tsinghua.edu.cn/simplevllm-0.6.1.post2 运行:</

简单了解 JVM

目录 ♫什么是JVM ♫JVM的运行流程 ♫JVM运行时数据区 ♪虚拟机栈 ♪本地方法栈 ♪堆 ♪程序计数器 ♪方法区/元数据区 ♫类加载的过程 ♫双亲委派模型 ♫垃圾回收机制 ♫什么是JVM JVM 是 Java Virtual Machine 的简称&#xff0c;意为 Java虚拟机。 虚拟机是指通过软件模…