代码随想录刷题day58|每日温度下一个更大元素I

文章目录

  • day58学习内容
  • 一、每日温度
    • 1.1、思路
    • 1.2、代码
  • 二、下一个更大元素I
    • 2.1、思路
    • 2.2、代码
  • 总结
    • 1.感想
    • 2.思维导图


day58学习内容

day58主要内容

  • 每日温度
  • 下一个更大元素I

声明
本文思路和文字,引用自《代码随想录》


一、每日温度

739.原题链接

1.1、思路

  1. 使用单调栈:

    • 栈的特性: 我们使用一个栈来帮助记录那些还没有找到更高温度的日子。这个栈是单调递减的,意味着栈顶的温度总是最低的。
  2. 遍历数组:

    • 从数组的第一个元素开始遍历。
    • 对于每个元素(代表当前天的温度),我们比较它与栈顶元素(栈中元素存储的是温度的索引,因此要回数组中取值)代表的温度。
  3. 温度比较:

    • 如果当前温度小于或等于栈顶元素对应的温度,我们将当前温度的索引入栈。这表示还没有找到更高的温度,需要继续等待。
    • 如果当前温度大于栈顶元素对应的温度,这表示我们找到了一个更高的温度。我们将进行以下步骤:
      • 弹出栈顶元素。
      • 计算这一天与栈顶元素代表的天数之间的差,即为栈顶元素所需等待的天数,记录在结果中。
      • 继续检查新的栈顶元素,直到找到一个栈顶元素对应的温度大于当前温度,或者栈变空。
  4. 重复上述步骤:

    • 对数组中每个元素重复上述步骤。
  5. 处理栈中剩余元素:

    • 遍历完成后,栈中可能还有一些元素。这些元素对应的天数之后没有更高的温度出现,它们对应的结果应该是0(通常这在初始化结果数组时已经默认设置)。

1.2、代码

class Solution {public int[] dailyTemperatures(int[] temperatures) {// 获取温度数组的长度int lens = temperatures.length;// 初始化结果数组,用于存储每天后需要等待多少天才有更高的温度int[] res = new int[lens];// 创建一个双端队列作为栈使用,存储数组索引Deque<Integer> stack = new LinkedList<>();// 先将第一天的索引入栈stack.push(0);// 从第二天开始遍历温度数组for (int i = 1; i < lens; i++) {// 检查当前天的温度是否小于或等于栈顶天的温度if (temperatures[i] <= temperatures[stack.peek()]) {// 如果是,将当前天的索引入栈,因为还没找到更高温度stack.push(i);} else {// 如果当前天的温度大于栈顶天的温度while (!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()]) {// 计算等待天数,当前天索引减去栈顶天的索引res[stack.peek()] = i - stack.peek();// 栈顶元素出栈,因为已找到更高的温度stack.pop();}// 将当前天的索引入栈,因为可能需要比较后续的天气stack.push(i);}}// 栈中剩余的索引代表的天数将不会有更高的温度,其结果数组中默认为0return res;}
}

二、下一个更大元素I

496.原题链接

2.1、思路

给定两个数组 nums1nums2,其中 nums2nums1 的超集。对于 nums1 中的每一个元素,需要在 nums2 中找到该元素对应位置之后的第一个比它大的元素。如果不存在,则结果为 -1

  1. 哈希表存储

    • 首先,对 nums1 的元素建立一个映射,记录每个元素在 nums1 中的位置,便于最后构建结果数组。
  2. 单调栈使用

    • 使用一个单调栈来处理 nums2。栈里存储的是 nums2 的元素索引,这些索引在栈中的顺序由栈底到栈顶是对应值递减的。
    • 遍历 nums2,对于每个元素,如果它小于或等于栈顶元素的值,则直接将其索引压入栈中。
    • 如果当前元素大于栈顶元素的值,这说明我们找到了栈顶元素的“下一个更大元素”。此时,将栈顶元素弹出,并在结果映射中更新该元素的“下一个更大元素”为当前元素。重复此操作,直到当前元素不再大于新的栈顶元素或栈为空,然后将当前元素的索引压入栈中。
  3. 构建结果

    • 通过上述过程,栈中的元素会在遇到比它大的元素时被逐个弹出,并更新结果数组。最终,每当一个元素被弹出栈时,我们就确定了它的下一个更大元素。
    • 根据 nums1 中元素的原始索引位置,从结果映射中取出答案填充到最终输出的结果数组中。

2.2、代码

class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {// 创建一个栈来保存数组元素的索引Stack<Integer> temp = new Stack<>();// 初始化结果数组,所有元素默认值为-1(代表没有找到下一个更大的元素)int[] res = new int[nums1.length];Arrays.fill(res, -1);// 创建一个哈希表来记录nums1中每个元素的索引,便于后续快速查找HashMap<Integer, Integer> hashMap = new HashMap<>();for (int i = 0; i < nums1.length; i++) {hashMap.put(nums1[i], i);}// 将nums2的第一个元素的索引入栈temp.add(0);// 遍历nums2中的所有元素for (int i = 1; i < nums2.length; i++) {// 如果当前元素小于等于栈顶元素,将其索引入栈if (nums2[i] <= nums2[temp.peek()]) {temp.add(i);} else {// 否则,循环判断栈顶元素与当前元素的大小while (!temp.isEmpty() && nums2[temp.peek()] < nums2[i]) {// 如果栈顶元素小于当前元素,弹出栈顶元素if (hashMap.containsKey(nums2[temp.peek()])) {// 检查弹出的栈顶元素是否存在于nums1中Integer index = hashMap.get(nums2[temp.peek()]);// 更新nums1中对应元素的结果为当前元素(下一个更大元素)res[index] = nums2[i];}temp.pop();}// 将当前元素索引入栈temp.add(i);}}// 返回结果数组return res;}
}

总结

1.感想

  • 单调栈第一天,冲
  • 单调栈具体的模拟过程,卡尔的视频讲的很清楚。建议去看视频,这里不画图了,太复杂了。

2.思维导图

本文思路引用自代码随想录,感谢代码随想录作者。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/825415.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python复制文件夹内容

参考博客 https://blog.csdn.net/itfans123/article/details/133710731 案例1 import os import shutildef copy_folder(source_folder, destination_folder):# 创建目标文件夹os.makedirs(destination_folder, exist_okTrue)# 遍历源文件夹中的所有文件和文件夹for item in …

[docker] 核心知识 - 概念和运行

[docker] 核心知识 - 概念和运行 之前 docker 学了个开头就去搞项目去了&#xff0c;不过项目也开展了好久了&#xff0c;前端差不多吃透了&#xff0c;有些新功能需要用 docker 和 k8s……是时候重新学习一下了。 这一部分简单的过一下概念和讲一下怎么运行 docker 镜像和启…

论文复现《SplaTAM: Splat, Track Map 3D Gaussians for Dense RGB-D SLAM》

前言 SplaTAM算法是首个开源的基于RGB-D数据&#xff0c;生成高质量密集3D重建的SLAM技术。 通过结合3DGS技术和SLAM框架&#xff0c;在保持高效性的同时&#xff0c;提供精确的相机定位和场景重建。 代码仓库&#xff1a;spla-tam/SplaTAM: SplaTAM: Splat, Track & Map 3…

从零开始学习Linux(3)----权限

1.Linux权限的概念 Linux用户&#xff1a;1.root&#xff0c;超级管理员 2.非root&#xff0c;XXX&#xff0c;普通用户 命令&#xff1a;su[用户名] 功能&#xff1a;切换用户。 su -&#xff1a;是指以root的身份重新登录一次。 普通用户切换root需要输入密码&#xff0c;…

java算法day56 | 动态规划part15 ● 392.判断子序列 ● 115.不同的子序列

392.判断子序列 动规五部曲&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j] 表示以下标i-1为结尾的字符串s&#xff0c;和以下标j-1为结尾的字符串t&#xff0c;相同子序列的长度为dp[i][j]。确定递推公式 在确定递推公式的时候&#xff0c;…

优先编码器电路①

描述 下表是某优先编码器的真值表。 ①请用Verilog实现此优先编码器 输入描述 ①输入描述&#xff1a; input [8:0] I_n 输出描述 ①输出描述&#xff1a; output reg [3:0] Y_n 解题分析 本优先编码器&#xff0c;可采用case语句实现&#xff…

嵌入式操作系统FreeRTOS(队列管理)

1.队列管理 &#xff08;1&#xff09;数据存储 队列可以保存有限个具有确定长度的数据单元。队列可以保存的最大单元数目被称为队列的“深度”。在队列创建时需要设定其深度和每个单元的大小。通常情况下&#xff0c;队列被作为FIFO (先进先出)使用&#xff0c;即数据由队列尾…

解决Git 不相关的分支合并

可以直接调到解决方案,接下来是原因分析和每步的解决方式 问题原因: 我之前在自己本机创建了一个初始化了Git仓库,后来有在另一个电脑初始化仓库,并没有clone自己在本机Git远程仓库地址,导致Git历史版本不相关 错误信息 From https://gitee.com/to-uphold-justice-for-other…

点击广告就能日赚收益1000+?开发一款看广告赚收益的APP靠谱吗?

APP对接广告变现是开发者获得收益的重要方式之一&#xff0c;对一些体量较小的APP来说&#xff0c;甚至是唯一的收益来源。开发者是否可以单独开发一款全是广告的APP&#xff0c;拿出一部分的广告收益给点击者&#xff0c;类似在快手极速版里看广告获得金币一个原理&#xff0c…

【Axure教程】制作书本翻页效果

翻书效果是一种模拟真实书本翻页动作的视觉效果&#xff0c;常用于网页设计和应用程序中&#xff0c;以增强用户体验和交互性。这种效果通常通过动画和过渡效果来模拟书页的翻转&#xff0c;使用户感觉像在真实的书本中翻页一样。 所以今天作者就教大家怎么在Axure里用中继器制…

(CVPR,2024)CAT-Seg:基于成本聚合的开放词汇语义分割

文章目录 摘要引言方法计算成本与嵌入空间成本聚合类别成本聚合CAT-Seg框架 实验 摘要 开放词汇的语义分割面临着根据各种文本描述对图像中的每个像素进行标记的挑战。在这项工作中&#xff0c;我们引入了一种新颖的基于成本的方法&#xff0c;以适应视觉语言基础模型&#xf…

CSS显示模式

目录 CSS显示模式简介 CSS显示模式的分类 块元素 行元素 行内块元素 元素显示模式的转换 使块内文字垂直居中的方法 设计简单小米侧边栏&#xff08;实践&#xff09; CSS显示模式简介 元素显示模式就是元素&#xff08;标签&#xff09;以什么方式进行显示&#xff0…

让15万的车也配激光雷达,速腾发布中长距「千元机」MX

‍作者 |老缅 编辑 |德新 4月15日&#xff0c;国内头部激光雷达公司速腾聚创发布了新一代中长距激光雷达MX。 相比较其产品配置&#xff0c;最令人惊喜的是它的价格。 「MX将以低于200美元的价格作为基础&#xff0c;实现第一个项目的量产。」速腾聚创CEO邱纯潮在发布会现场…

ABAP 批次换算率和批次辅单位数量计算

文章目录 ABAP 批次换算率和批次辅单位数量计算第一种方式批次换算率获取辅单位完整程序运行结果 第二种方式核心程序 CONVERSION_EXIT_ATINN_INPUT&#xff1a;特征值转换示例 ABAP 批次换算率和批次辅单位数量计算 如果一个物料有批次双单位&#xff0c;并且在报表里面展示批…

初识LangChain的快速入门指南

LangChain 概述 LangChain是一个基于大语言模型用于构建端到端语言模型应用的框架&#xff0c;它提供了一系列工具、套件和接口&#xff0c;让开发者使用语言模型来实现各种复杂的任务&#xff0c;如文本到图像的生成、文档问答、聊天机器人等。 LangChain简化了LLM应用程序生…

Mysql The last packet sent successfully to the server was 0 milliseconds ago.

项目启动后&#xff0c;报错&#xff0c;但是我的navicat 数据库连接工具是连接上的&#xff0c;没有问题的&#xff0c;但是程序就是连接不上。端口放开了&#xff0c;防火墙也放开了 先说问题&#xff1a;是网络问题&#xff0c; 如何解决&#xff1a;因为我的机子上又跑了…

Pytest精通指南(18)多种手段过滤或升级警告

文章目录 前言使用命令行实现过滤未处理警告&#xff0c;执行结果升级警告忽略警告忽略警告摘要 使用装饰器实现过滤装饰方法装饰类装饰模块 使用配置文件实现过滤 前言 在 pytest 中执行测试时&#xff0c;可能会出现警告&#xff0c;这些警告通常是由于代码中存在某些可能导致…

代码随想录算法训练营Day58|LC739 每日温度LC496 下一个更大元素I

一句话总结&#xff1a;单调栈专题&#xff01; 原题链接&#xff1a;739 每日温度 很简单的单调栈入门题。 在使用单调栈解决此题之前&#xff0c;先要想到&#xff1a;单调栈要什么时候用呢&#xff1f;怎么才能想到用单调栈呢&#xff1f; 什么时候用单调栈呢&#xff1f;…

海信发布《黑神话:悟空》定制电视E8N新品,重塑大屏游戏体验

4月17日&#xff0c;在“AI美好生活”2024海信电视E8系列新品发布会上&#xff0c;海信电视官宣成为《黑神话&#xff1a;悟空》全球官方合作伙伴。同时&#xff0c;海信电视还为广大游戏玩家带来了《黑神话&#xff1a;悟空》的显示CP&#xff0c;推出了官方定制电视——旗舰新…

基于SpringBoot的“论坛管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“论坛管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 论坛管理系统结构图 前台首页功能界面图 用户登录…