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

news/2024/10/9 3:01:17/

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

给定一个整数数组 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/news/1527313.html

相关文章

C++掉血迷宫

目录 开头程序程序的流程图程序游玩的效果下一篇博客要说的东西 开头 大家好&#xff0c;我叫这是我58。 程序 #include <iostream> #include <string> #include <cstring> using namespace std; enum RBYG {R 1,B 2,Y 4,G 7, }; struct heal {int ix…

Java集合笔记

集合选择的取舍&#xff1a; 1、如果希望记住元素的添加顺序&#xff0c;需要存储重复的元素&#xff0c;又要频繁的根据索引查询数据&#xff1f; 用ArrayList集合&#xff08;有序、可重复、有索引&#xff09;&#xff0c;底层基于数组的。&#xff08;常用&#xff09; 2、…

C51单片机-单按键输入识别,键盘消抖

【实验目的】 独立按键的识别方法、键盘消抖等。 【实验现象】 每按一次独立键盘的S2键&#xff0c;与P1口相连的八个发光二极管中点亮的一个往下移动一位。 【实验说明】 关于按键去抖动的解释&#xff0c;我们在手动按键的时候&#xff0c;由于机械抖动或是其它一些非人为的因…

Linux 常用指令

Linux 常用指令 这是本人在备战 CSP 初赛做 Linux 指令题时&#xff0c;心血来潮整理的&#xff0c;希望对大家有帮助。如有错误或有补充&#xff0c;麻烦私信或评论指出。 表格按字母顺序排列 命令作用alias对命令重命名cal显示日历的指令cat查看文本文件的内容cd改变当前工…

UE5 阴影通道

Shadow Pass Switch节点中 Default代表模型遮罩的效果 Shadow代表阴影的生成遮罩效果

Bio-Linux-shell详解-2-基本Shell命令快速掌握

Bio-Linux-shell详解-1-从0开始-CSDN博客 想了解基本知识可以先看上文&#xff0c;本次我们讲述一些Shell的基本命令。 目录 1.shell输入命令 2.man命令查看说明文档 3.文件查看命令 &#xff08;1&#xff09;linux文件结构 &#xff08;2&#xff09;cd切换工作目录 &…

等保测评:如何评估第三方服务提供商的安全性

等保测评中第三方服务提供商安全性评估方法 在等保测评中&#xff0c;评估第三方服务提供商的安全性是确保信息系统整体安全的重要组成部分。以下是评估第三方服务提供商安全性的关键步骤&#xff1a; 安全风险识别&#xff1a;首先&#xff0c;需要识别与第三方服务提供商相关…

【机器学习】--- 深度学习中的注意力机制

深度学习中的注意力机制 在深度学习领域&#xff0c;注意力机制&#xff08;Attention Mechanism&#xff09;已经成为近年来最受瞩目的研究热点之一。它不仅提升了现有模型的性能&#xff0c;更启发了全新的网络结构&#xff0c;如Transformer模型。注意力机制被广泛应用于自…