代码随想录算法训练营第62天 | 739.每日温度 496.下一个更大元素I

news2025/1/12 8:44:06

每日温度

Alt
如果我们单纯的遍历数组,我们不知道当前元素是否比之前的元素大,所以需要维护一个容器来记录遍历过的元素。
什么时候用单调栈?通常是一维数组,要寻找任一个元素的右边或左边第一个比自己大或小的元素的位置。时间复杂度为O(n)。
这道题的单调栈应该是递增栈还是递减栈呢(从栈头到栈底)?这道题是求右边第一个比自己大的元素的位置,小于等于栈顶元素时当前元素下标应该入栈;遇到大于栈顶元素的情况,应该记录当前元素与栈顶元素下标差,result[st.top()] = i - st.top(),并弹出栈顶元素,重复操作直到当前元素小于等于栈顶元素,此时将当前元素下标入栈。

  • 情况一:当前遍历的元素T[i]大于栈顶元素T[st.top()]
  • 情况二:当前遍历的元素T[i]等于栈顶元素T[st.top()]
  • 情况三:当前遍历的元素T[i]小于栈顶元素T[st.top()]

由此可知,求右边第一个比自己大的元素的位置,应该维护从栈头到栈底的递增栈。

class Solution {
public:
	vector<int> dailyTemperatures(vector<int>& temperatures) {
		vector<int> result(temperatures.size(), 0);
		stack<int> st;
		st.push(0);
		for(int i = 1; i < temperatures.size(); i++) {
			while(!st.empty() && temperatures[i] > temperatures[st.top()]) {
				result[st.top()] = i - st.top();
				st.pop();
			}
			// 此时当前温度一定是小于等于栈顶元素,当前元素下标入栈
			st.push(i);
		}
		return result;
	}
};

下一个更大元素I

Alt
相对于上一道题,这道题搞了两个数组,数组1是数组2的子集,这一点有点绕,因为最终求的结果与数组1长度一致,所以我们应该构建数组1长度的结果数组,并根据题意初始化为-1。
另外要注意是找数组1中的元素在数组2中的下一个更大元素,所以单调栈的操作应该是在遍历数组2的过程中进行的,入栈出栈操作与上一题相同,只是在记录结果数组时需要判断栈顶元素是否在数组1中。
判断一个元素是否在数组中,很容易想到哈希表,建立数值到下标的映射,更方便地记录结果。

class Solution {
public:
	vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
		vector<int> result(nums1.size(), -1);
		stack<int> st;
		unordered_map<int, int> umap;
		for(int i = 0; i < nums1.size(); i++) {  // 建立数组1中数值到下标的映射
			umap[nums1[i]] = i;
		}
		for(int i = 0; i < nums2.size(); i++) {  // 遍历数组2
			while(!st.empty() && nums2[i] > nums2[st.top()]) {  // 当前元素大于栈顶元素
				if(umap.count(nums2[st.top()]) > 0) {  // 如果栈顶元素出现在数组1中,结果应该被记录
					int index = umap[nums2[st.top()]];
					result[index] = nums2[i];
				}
				st.pop();  // 不论是否结果是否记录,必须维护单调栈
			}
			// 当前元素一定小于等于栈顶元素,满足递增栈条件(从栈头到栈底)
			st.push(i);
		}
		return result;
	}
};

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

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

相关文章

Connection管理类实现(模块六)

目录 类功能 类定义 类实现 编译 本文使用了自定的Any类 Any类的简单实现-CSDN博客 类功能 类定义 // DISCONECTED -- 连接关闭状态 CONNECTING -- 连接建立成功-待处理状态 // CONNECTED -- 连接建立完成,各种设置已完成,可以通信状态 DISCONNECTING -- 待关闭状态 t…

每日五道java面试题之spring篇(六)

目录&#xff1a; 第一题 ApplicationContext通常的实现是什么&#xff1f;第二题 什么是Spring的依赖注入&#xff1f;第三题 依赖注入的基本原则第四题 依赖注入有什么优势&#xff1f;第五题 有哪些不同类型的依赖注入实现方式&#xff1f; 第一题 ApplicationContext通常的…

基于频率增强的数据增广的视觉语言导航方法(VLN论文阅读)

基于频率增强的数据增广的视觉语言导航方法&#xff08;VLN论文阅读&#xff09; 摘要 视觉和语言导航&#xff08;VLN&#xff09;是一项具有挑战性的任务&#xff0c;它需要代理基于自然语言指令在复杂的环境中导航。 在视觉语言导航任务中&#xff0c;之前的研究主要是在空间…

pycharm如何设置滚轮缩放代码大小?

左上角的File找到设置&#xff0c;或者快捷键ctrlalts。 弹出对话框&#xff0c;手动输入mouse&#xff0c;点击general&#xff0c;勾选改变字体大小&#xff0c;ok确认

转前端了!!

大家好&#xff0c;我是冰河~~ 没错&#xff0c;为了更好的设计和开发分布式IM即时通讯系统&#xff0c;也为了让大家能够直观的体验到分布式IM即时通讯系统的功能&#xff0c;冰河开始转战前端了。也就是说&#xff0c;整个项目从需求立项到产品设计&#xff0c;从架构设计到…

ubuntu20.04中配置Pyrep和CoppeliaSim

ubuntu20.04中配置Pyrep和CoppeliaSim 在Ubuntu20.04中配置 Pyrep &#xff0c;实现应用Python语言的机器人在 Vrep&#xff08;CoppeliaSim&#xff09;中的虚拟仿真 一、安装CoppeliaSim 4.1 1.1 下载适配Ubuntu20.04的CoppeliaSim 4.1软件 下载链接&#xff1a;https://…

【前端素材】推荐优质后台管理系统Dashy平台模板(附源码)

一、需求分析 后台管理系统&#xff08;或称作管理后台、管理系统、后台管理平台&#xff09;是一种专门用于管理网站、应用程序或系统后台运营的软件系统。它通常由一系列功能模块组成&#xff0c;为管理员提供了管理、监控和控制网站或应用程序的各个方面的工具和界面。以下…

Nginx实现平滑升级

平滑升级 本篇目标&#xff1a;将现有的 nginx 1.22.0 版本升级为 1.24.0 //查看现有版本 [root12 ~]# nginx -v nginx version: nginx/1.22.01、首先在官网下载软件包&#xff0c;地址&#xff1a;nginx: download 2、把要 1.24.0 拖进 /opt 目录后&#xff0c;解压&#xf…

抖店是怎么运营做起来的?一文详解抖店的运营逻辑和流程,可收藏

我是王路飞。 很多人都知道现在的抖音有【商城】&#xff0c;进入之后就是一个个的抖音小店了&#xff0c;也知道抖店的红利。 但是抖店具体是怎么运营并且做起来的&#xff0c;就不太清楚了&#xff0c;因此很多新手明明眼馋抖店的红利&#xff0c;却又无从下手。 今天这篇…

YOLOv9尝鲜测试五分钟极简配置

pip安装python包&#xff1a; pip install yolov9pip在https://github.com/WongKinYiu/yolov9/tree/main中下载好权重文件yolov9-c.pt。 运行下面代码&#xff1a; import yolov9model yolov9.load("yolov9-c.pt", device"cpu") # load pretrained or c…

Spring综合漏洞利用工具

Spring综合漏洞利用工具 工具目前支持Spring Cloud Gateway RCE(CVE-2022-22947)、Spring Cloud Function SpEL RCE (CVE-2022-22963)、Spring Framework RCE (CVE-2022-22965) 的检测以及利用&#xff0c;目前仅为第一个版本&#xff0c;后续会添加更多漏洞POC&#xff0c;以及…

【Flink精讲】Flink性能调优:CPU核数与并行度

常见问题 举个例子 提交任务命令&#xff1a; bin/flink run \ -t yarn-per-job \ -d \ -p 5 \ 指定并行度 -Dyarn.application.queuetest \ 指定 yarn 队列 -Djobmanager.memory.process.size2048mb \ JM2~4G 足够 -Dtaskmanager.memory.process.size4096mb \ 单个 TM2~8G 足…

【机器人学导论笔记】三、操作臂正运动学

3.1 概述 操作臂正运动学研究操作臂的运动特性&#xff0c;主要涉及与运动有关的几何参数和时间参数。本章中&#xff0c;只研究静止状态下操作臂连杆的位置和姿态。 处理这些复杂的几何参数需要一些步骤&#xff1a;首先需要在操作臂的每个连杆上分别固接一个连杆坐标系&…

基于ELFBoard开发板的车牌识别系统

本项目采用的是ElfBoard ELF1开发板作为项目的核心板&#xff0c;主要实现的功能为通过USB 摄像头对车牌进行识别&#xff0c;如果识别成功则会亮绿灯&#xff0c;并将识别的车牌号上传到手机APP上面&#xff0c;车牌识别的实现是通过百度OCR进行实现&#xff0c;手机APP是用Ja…

《低功耗方法学》翻译——第十四章:电源切换网络设计

第十四章&#xff1a;电源切换网络设计 功率门控是在待机或休眠模式下降低漏电功率最有效的方法&#xff0c;但这种方法存在诸如休眠晶体管占用的硅面积、永久和虚拟电源网络的布线资源以及复杂的功率门控设计和实现过程等开销&#xff0c;影响设计风险和进度。 除了开销外&a…

2024年Facebook自动回复优化指南:提升客户满意度的策略(内含自动回复中英文模板)

在这个数字化的时代&#xff0c;快速响应已经成为企业在与客户沟通的必备要素。但是当经常面对大量的相同信息时&#xff0c;如何可以提高效率呢&#xff1f;目前很多社交媒体平台都内设了自动回复功能&#xff0c;像是Facebook。这个功能确保无论何时有人联系你&#xff0c;都…

大气颗粒物与VOCs PMF源解析

原文&#xff1a;大气颗粒物与VOCs PMF源 第一&#xff1a;PMF源解析技术及其输入文件准备 1、大气污染源解析方法有哪些&#xff1f; 2、这些方法各自应用的条件以及它们的优缺点&#xff1f; 3、大气颗粒物的基础知识及各组分的主要来源 大气颗粒物的来源&#xff1a;…

Oracle EBS GL 外币折算逻辑

背景 由于公司财务在10月份期间某汇率维护错误,导致帐套折算以后并合传送至合并帐套生成合并日记帐凭证的借贷金额特别大,但是财务核对的科目余额有没有问题,始终觉得合并日记帐生成会计分发有问题,需要我们给出外币折算逻辑。 基础设置 汇率 Path: GL->设置->币种-&…

Java核心-核心类与API(3)

话接上回&#xff0c;继续核心类与API的学习&#xff0c;这次介绍一下枚举类以及与系统、交互有关的类&#xff0c;需要了解并能使用即可。 一、枚举类 1、概述 枚举也称穷举&#xff0c;简单理解就是把所有可能一一列举出来&#xff08;穷尽所有可能&#xff09;。枚举是一…

matlab新能源汽车三自由度操纵稳定性分析及优化

1、内容简介 略 可以交流、咨询、答疑 55-新能源汽车三自由度操纵稳定性分析及优化 2、内容说明 略 摘 要 电动化是节能减排、寻求替代能源的最佳途径&#xff0c;已成为行业共识&#xff0c;论文基于江西科技学院桑塔纳轿车油改气项目&#xff0c;在拆除发动机、变速…