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

每日温度

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++) {  // 遍历数组2while(!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.mzph.cn/news/703583.shtml

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

相关文章

Linux-实用操作(黑马学习笔记)

各类小技巧&#xff08;快捷键&#xff09; ctrl c 强制停止 ● Linux某些程序的运行&#xff0c;如果想要强制停止它&#xff0c;可以使用快捷键ctrl c ● 命令输入错误&#xff0c;也可以通过快捷键ctrl c&#xff0c;退出当前输入&#xff0c;重新输入 ctrl d 退出或登…

客户端订阅服务端事件的机制

一、场景描述 产业大脑平台是一个典型的审核系统&#xff0c;用户发布到平台的信息需要经过审核员审核后生效。 用户发布信息->审核员审核信息->用户信息生效&#xff0c;这一流程可能发生在用户的同一次登录周期内。为了使客户端能实时响应信息的状态变化&#xff0c;…

使用Node.js和Vue.js构建全栈Web应用

随着互联网的迅速发展&#xff0c;Web应用程序的开发变得越来越复杂和多样化。为了满足用户不断变化的需求&#xff0c;全栈开发已成为一个备受关注的话题。在本篇博客中&#xff0c;我将介绍如何使用Node.js和Vue.js来构建全栈Web应用。 Node.js是一个基于Chrome V8引擎的Jav…

AI之T2I:Stable Diffusion 3的简介、安装和使用方法、案例应用之详细攻略

AI之T2I&#xff1a;Stable Diffusion 3的简介、安装和使用方法、案例应用之详细攻略 目录 Stable Diffusion 3的简介 1、效果测试 官方demo 网友提供 Stable Diffusion 3的安装和使用方法 1、安装 2、使用方法 Stable Diffusion 3的案例应用 1、基础案例 Stable Diff…

庖丁解牛-二叉树的遍历

庖丁解牛-二叉树的遍历 〇、前言 01 文章内容 一般提到二叉树的遍历&#xff0c;我们是在说 前序遍历、中序遍历、后序遍历和层序遍历 或者说三序遍历层序遍历&#xff0c;毕竟三序和层序的遍历逻辑相差比较大下面讨论三序遍历的递归方法、非递归方法和非递归迭代的统一方法然…

数据结构2月25日

第一道&#xff1a; 第二道&#xff1a; 1、插入到prev和next中间 1.new(struct list_head*)malloc(sizeof(struct list_head*)); if(newNULL) { printf("失败\n"); return; } new->nextprev->next; prev->nextnew; return; 2、删除prve和next…

Mybatis-Plus学习

文章目录 一、简介1. 概述2. 特点3. 框架架构 二、入门案例1. 数据库环境准备2. SpringBoot工程准备3. 配置application.yml4. 项目开发5. MybatisPlus测试 三、BaseMapper1. 源码2. 方法测试 四、IService1. 简介2. 使用IService3. 测试IService 五、MybatisPlus为我们提供的一…

大文件传输之udp如何传输大量数据

在数字化时代&#xff0c;对大文件传输的需求正以前所未有的速度增长。无论是个人用户还是企业&#xff0c;都急切寻求一种能够快速且稳定地处理大量数据的传输方法。UDP&#xff08;用户数据报协议&#xff09;以其无连接的特性和高效的数据传输能力&#xff0c;成为了大文件传…

啤酒:探索精酿啤酒与家常菜的温馨滋味

在繁忙的生活中&#xff0c;我们总是在寻找一种简单而温馨的美食享受。家常菜&#xff0c;作为最具代表性的传统美食&#xff0c;以其丰富的口味和深厚的情感价值而受到广泛欢迎。而当Fendi Club啤酒遇上家常菜&#xff0c;它们将共同演绎出一曲充满温情的味觉交响曲。 Fendi C…

抖音视频批量下载工具|抖音数据抓取工具

想要随时随地观看抖音平台上的精彩视频内容吗&#xff1f;不必担心&#xff01;这款基于C#开发的抖音视频下载工具将成为您的得力助手&#xff0c;让您轻松畅享最新、最热的视频内容。 【多功能实用】 无论是批量视频提取还是固定视频下载&#xff0c;这款工具都能满足您的需求…

第十三章 Linux——备份与恢复

第十三章 Linux——备份与恢复 基本介绍安装dump和restore使用dump完成备份dump语法说明dump应用案例1dump应用案例2dump-w查看备份时间文件备份文件或者目录备注 使用restore基本语法基本介绍restore基本语法应用案例1应用案例2应用案例3应用案例4 基本介绍 实体机无法做快照…

跨境支付介绍

1、跨境电商定义和分类&#xff1b; 2、国际贸易清结算&#xff1b; 3、跨境支付&#xff1b; 1、跨境电商定义和分类 跨境电商业务简单说就是指不同国家地域的主体通过电子商务进行交易的一种业务模式。同传统的电商不同&#xff0c;交易双方属于不同的国家。因此&#xff0…

成都直播基地作为产业重要载体,引领直播行业健康、多元发展

近年来&#xff0c;我国网络直播行业呈现出井喷式的发展态势。众多直播平台如雨后春笋般涌现&#xff0c;直播内容丰富多样&#xff0c;涵盖游戏、电竞、美食、旅游、教育等多个领域。同时&#xff0c;成都直播产业园规模持续扩大&#xff0c;产业不断完善&#xff0c;整体呈现…

免费享受企业级安全:雷池社区版WAF,高效专业的Web安全的方案

网站安全成为了每个企业及个人不可忽视的重要议题。 随着网络攻击手段日益狡猾和复杂&#xff0c;选择一个强大的安全防护平台变得尤为关键。 推荐的雷池社区版——一个为网站提供全面安全防护解决方案的平台&#xff0c;它不仅具备高效的安全防护能力&#xff0c;还让网站安…

【JavaScript 漫游】【021】EventTarget 接口

事件的本质是程序各个组成部分之间的一种通信方式&#xff0c;也是异步编程的一种实现。DOM 支持大量的事件。 EventTarget 接口概述 DOM 的事件操作&#xff08;监听和触发&#xff09;&#xff0c;都定义在 EventTarget 接口。所有节点对象都部署了这个接口&#xff0c;其他…

leetcode:46.全排列

1.什么是排列&#xff1f; 有顺序&#xff01;&#xff01; 2.树形结构&#xff1a; 使用used数组进行标记取过的元素&#xff0c;一个元素一个元素地进行取值&#xff0c;取完之后将used数组进行标记。 3.代码实现&#xff1a;&#xff08;循环从i0开始&#xff0c;而不是…

Spring事务模板及afterCommit存在的坑

大家好&#xff0c;我是墨哥&#xff08;隐墨星辰&#xff09;。今天的内容来源于两个线上问题&#xff0c;主要和大家聊聊为什么支付系统中基本只使用事务模板方法&#xff0c;而不使用声明式事务Transaction注解&#xff0c;以及使用afterCommit()出现连接未按预期释放导致的…

pycharm如何安装pygame库

pycharm如何安装pygame库 PyCharm是Python中广受欢迎的一种IDE&#xff0c;它可以为用户提供许多工具和便利的服务&#xff0c;从而大大提高开发效率。pygame库可以用python进行游戏开发提供很好的支持&#xff0c;那么在ptcharm中如何安装pygame库呢&#xff1f; 一、安装步…

Jmeter系列(2)目录介绍

目录 Jmeter目录介绍bin目录docsextrasliblicensesprintable_docs Jmeter目录介绍 在学习Jmeter之前&#xff0c;需要先对工具的目录有些了解&#xff0c;也会方便后续的学习 bin目录 examplesCSV目录中有CSV样例jmeter.batwindow 启动文件jmeter.shMac/linux的启动文件jmete…

DBeaver一段时间不使用,就会自动断开连接,需要刷新数据库或者断开重连解决方案 DB2

DBeaver一段时间不使用&#xff0c;就会自动断开连接&#xff0c;需要刷新数据库或者断开重连解决方案 DB2