首页 > 其他分享 >LeetCode739——每日温度

LeetCode739——每日温度

时间:2023-09-08 09:13:17浏览次数:43  
标签:int res 每日 元素 LeetCode739 temperatures 数组 单调 温度

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

 

提示:

  • 1 <= temperatures.length <= 10e5
  • 30 <= temperatures[i] <= 100

思路:下意识的想到直接暴力,两次循环,第一次循环用来遍历数组中的每一个元素,第二次遍历用来查找该元素后面比他大的第一个元素的下标,将结果存入res数组中,最后返回res数组,对于数据量为10e5的情况下,两次循环肯定会超时

了解单调栈的使用

什么时候该使用单调栈呢?

通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了。单调栈的使用思想也无异于以空间换时间,减少遍历次数,使得原本O(n²)的时间复杂度变为O(n)的时间复杂度。

在使用单调栈的时候首先要明确如下几点:

  1. 单调栈里存放的元素是什么?

单调栈里只需要存放元素的下标i就可以了,如果需要使用对应的元素,直接T[i]就可以获取。

  1. 单调栈里元素是递增呢? 还是递减呢?

注意一下顺序为 从栈头到栈底的顺序,这里我们要使用递增循序(再强调一下是指从栈头到栈底的顺序),因为只有递增的时候,加入一个元素i,才知道栈顶元素在数组中右面第一个比栈顶元素大的元素是i。

代码实现如下:

class Solution {
   public int[] dailyTemperatures(int[] temperatures) {
        Stack<Integer> stack = new Stack<>();
        int n = temperatures.length;
        int[] res = new int[n];
        for(int i=0;i<n;i++)
        {
            while(!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()])
            {
                int preIndex = stack.pop();
                res[preIndex] = i - preIndex;
            }
            stack.push(i);
        }
        return res;
    }
}

 

标签:int,res,每日,元素,LeetCode739,temperatures,数组,单调,温度
From: https://www.cnblogs.com/Yuansj0206/p/17686567.html

相关文章

  • 每日总结 9.7
    今天我完成了对hadoop和hive数据库的配置1.hive数据库启动命令1.启动start-dfs.sh2.启动start-yarn.sh3.启动mapred--daemonstarthistoryserver(历史服务器)4.跳转cd/export/server/hive5.启动metastorenohupbin/hive--servicemetastore>>logs/metastore.log2>&1&6.......
  • 9.7号每日总结
    今天帮同学搭建了集群和hive数据仓库,自己对linux指令的操作更为熟练,对相关的配置有了更为深刻的理解,今天在帮同学配置hive的时候发现nodemanager出现了问题,最后排查出来是防火墙的原因,最后重新安装了hadoop和相关配置,linux有一个优点就是安装和卸载不需要Windows那么复杂,可以专心......
  • 微信公众号每日定时推送(天气)
    1、请看VCR这是真实效果图,因为地址过于详细这里保护一下个人隐私ok,接下来直接上教程2、相关API接口申请2.1、微信2.1.1、微信公众平台申请测试账号首先打开微信公众平台申请测试账号。网页链接:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login要用微信登录,需要按......
  • 小杰尼的每日成语
    9.2人烟辐辏:人烟:指人家;辐辏:形容人或物聚集像车辐集中于车毂一样。指居民密集高屋建瓴:把瓶子里的水从高层顶上倾倒。比喻居高临下,不可阻遏。各自为政:指各自在职权范围内按照自己的主张行事,不互相配合。比喻不考虑全局,各搞一套。9.310.不负众望负:辜负;众:众人;望:期望。不辜负......
  • 每日小记2023.9.1
    内存管理对堆而言的,程序在运行时主动从堆上申请内存,这些内存通过go的内存分配器分配,由垃圾回收器回收。栈是每个goroutine独有的,不需要在操作的时候加锁,而堆上的内存有时需要加锁防止多线程冲突。对程序上的内存回收需要通过标记清除阶段,比如采用三色标记法。对栈而言,他的分配和释......
  • 每日一库:pprof简介
    pprof简介pprof是Go语言的一个性能分析库,它可以帮助开发者找出程序中的性能瓶颈。pprof提供了CPU分析、内存分析、阻塞分析等多种性能分析功能。以下是pprof的主要特性:CPU分析:pprof可以记录程序在CPU上的运行时间,并将这些数据以火焰图的形式展示出来。这可以帮助开发者找出程......
  • 具有 I 2C 和 SMBus 接口的 TMP75CQDRQ1、TMP75CQDGKRQ1、TMP75BQDGKRQ1 汽车类温度传
    一、器件介绍TMP75-Q1器件属于数字温度传感器,是负温度系数(NTC)和正温度系数(PTC)热敏电阻的理想替代产品。该器件无需校准或外部组件信号调节即可提供典型值为±1°C的精度。器件温度传感器为高度线性化产品,无需复杂计算或查表即可得知温度。片上12位模数转换器(ADC)......
  • 每日一练 | 华为认证真题练习Day104
    1、下面关于免费ARP报文的作用描述错误的是()。A.在VRRP备份组中用来通告主备发生变换B.用于通告一个新的现AC地址:发送方更换网卡,AC地址发生改变,为了能够在AP表项老化前通告所有主机,发送方可以发送一个免费ARPC.用于检查重复的IP地址:正常情况下不会收到ARP回应,如果收到,则表明本网......
  • 基于MQTT发布/订阅模式的物联网温度监测系统
    MQTT是一种轻量级的消息传输协议,主要用于物联网设备和应用程序之间的通信,是基于发布/订阅模式,具备灵活、安全、易于使用和可扩展等优点的物联网协议。 以下以物联网温度监测系统为例,来说明MQTT的发布/订阅模式。现有一个物联网温度监测系统,现场包括多个温度传感器和一个温度监测平......
  • 【Python-每日技巧】格式化输出的区别
    在Python中,字符串可以使用单引号(')或双引号(")括起来。如果字符串本身包含引号字符,你可以在字符串中使用反斜杠(\)进行转义。对于字符串中的美元符号($),它是一个普通的字符,不需要进行特殊处理。你可以直接在字符串中使用美元符号,如下所示:my_string="Thisisastringwitha$symbol."......