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

739. 每日温度

题目链接:739. 每日温度

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。

文章讲解/视频讲解:https://programmercarl.com/0739.%E6%AF%8F%E6%97%A5%E6%B8%A9%E5%BA%A6.html

思路与实现

我似乎用单调栈做过这道题,根据回忆写一下思路吧~

从后往前遍历,用一个单调栈存储元素和它对应的下标,这个栈是从大到小存储的,即栈底比栈顶大。如果单调栈为空或者栈顶元素大于当前遍历的值,则将当前遍历的值存入单调栈中。如果栈顶元素小于等于当前遍历的值,则弹出栈顶,直到单调栈为空或者栈顶元素大于当前遍历值为止。

在当前元素加入单调栈时,如果单调栈为空,那么说明没有下一个更高温度,结果用0表示;如果单调栈非空,结果为栈顶的下标减去当前元素的下标。代码如下:

class Solution {
public:vector<int> dailyTemperatures(vector<int>& temperatures) {stack<pair<int,int>> stk;vector<int> result(temperatures.size(), 0);for(int i = temperatures.size() - 1;i >= 0;i--){while(!stk.empty() && stk.top().second <= temperatures[i]){stk.pop();}if(stk.empty()) result[i] = 0;else result[i] = stk.top().first - i;stk.push({i, temperatures[i]});}return result;}
};

也可以让栈只存储元素下标,存储一个pair是没必要的。

class Solution {
public:vector<int> dailyTemperatures(vector<int>& temperatures) {stack<int> stk;vector<int> result(temperatures.size(), 0);for(int i = temperatures.size() - 1;i >= 0;i--){while(!stk.empty() && temperatures[stk.top()] <= temperatures[i]){stk.pop();}if(stk.empty()) result[i] = 0;else result[i] = stk.top() - i;stk.push(i);}return result;}
};

看了卡哥的教程,也可以从前向后遍历,单调栈为从大到小。然后每次记录result[stk.top]的值。

class Solution {
public:vector<int> dailyTemperatures(vector<int>& temperatures) {stack<int> stk;vector<int> result(temperatures.size(), 0);for(int i = 0;i<temperatures.size();i++){while(!stk.empty() && temperatures[stk.top()] < temperatures[i]){result[stk.top()] = i - stk.top();stk.pop();}stk.push(i);}return result;}
};

496. 下一个更大元素 I

题目链接:496. 下一个更大元素 I

nums1 中数字 x下一个更大元素 是指 xnums2 中对应位置 右侧第一个x 大的元素。

给你两个 没有重复元素 的数组 nums1nums2 ,下标从 0 开始计数,其中nums1nums2 的子集。

对于每个 0 <= i < nums1.length ,找出满足 nums1[i] == nums2[j] 的下标 j ,并且在 nums2 确定 nums2[j]下一个更大元素 。如果不存在下一个更大元素,那么本次查询的答案是 -1

返回一个长度为 nums1.length 的数组 ans 作为答案,满足 ans[i] 是如上所述的 下一个更大元素

文章讲解/视频讲解:https://programmercarl.com/0496.%E4%B8%8B%E4%B8%80%E4%B8%AA%E6%9B%B4%E5%A4%A7%E5%85%83%E7%B4%A0I.html

思路与实现

首先对于nums2,用单调栈求出每个下标位置下一个更大元素。

根据题设,nums1、nums2中所有整数互不相同。因此可以用一个hashmap来存储nums2中所有整数的值和它对应的下标。接着遍历nums1数组,通过hashmap找到在nums2中对应的位置,再根据上一步得出下一个更大元素。

代码如下:

class Solution {
public:vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {stack<int> stk;vector<int> nextNum(nums2.size(), -1);unordered_map<int,int> hashMap;for(int i = 0;i<nums2.size();i++){while(!stk.empty() && nums2[stk.top()] < nums2[i]){nextNum[stk.top()] = nums2[i];stk.pop();}stk.push(i);hashMap[nums2[i]] = i;}vector<int> result(nums1.size(), -1);for(int i = 0;i<nums1.size();i++){int idx = hashMap[nums1[i]];result[i] = nextNum[idx];}return result;}
};

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

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

相关文章

红队打靶练习:PHOTOGRAPHER: 1

目录 信息收集 1、arp 2、nmap 3、nikto 目录扫描 1、gobuster 2、dirsearch WEB 信息收集 enum4linux smbclient 8000端口 CMS利用 信息收集 文件上传漏洞利用 提权 信息收集 get user.txt get flag 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# a…

Codeforces Round 923 (Div. 3)

Codeforces Round 923 (Div. 3) Codeforces Round 923 (Div. 3) A. Make it White 题意&#xff1a;略 思路&#xff1a;找最小和最大的‘B’下标即可 AC code&#xff1a; void solve() {cin >>n;string s; cin>> s;int mn INF, mx 0;for (int i 0; i <…

Linux文件和目录管理

目录基础 Linux操作系统以目录的方式来组织和管理系统中的所有文件。所谓的目录&#xff0c;就是将所有文件的说明信息采用树状结构组织起来。每个目录节点之下会有文件和子目录。 所有一切都从 ‘根’ 开始&#xff0c;用 ‘/’ 代表, 并且延伸到子目录。 bin&#xff1a;B…

Flink大状态和Checkpoint调优

文章迁移&#xff0c;待整理 2. 状态和Checkpoint调优 2.1 大状态调优 我们生产大多数会使用 fsState &#xff0c;memState程序挂了状态就丢了&#xff0c;应该没人会在生产使用&#xff0c;但是涉及到一些大状态&#xff0c;fsState效率很低&#xff0c;这时候会选择 roc…

ongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(2)-Swagger框架集成

Swagger是什么&#xff1f; Swagger是一个规范且完整API文档管理框架&#xff0c;可以用于生成、描述和调用可视化的RESTful风格的 Web 服务。Swagger 的目标是对 REST API 定义一个标准且和语言无关的接口&#xff0c;可以让人和计算机拥有无须访问源码、文档或网络流量监测就…

Linux: VM: hang 的一种情况

https://lore.kernel.org/lkml/2023082606-viper-accuracy-b0fdgregkh/T/ https://bugs.almalinux.org/view.php?id445 这里提到一个情况&#xff0c;会导致guest层VMhang住&#xff1b;算是不同类型数据的比较导致的一个问题。 影响的版本是&#xff1a; Install Almalinux …

Java并发基础:Deque接口和Queue接口的区别?

核心概念 Deque&#xff08;double ended queue&#xff0c;双端队列&#xff09;和Queue&#xff08;队列&#xff09;都是Java集合框架中的接口&#xff0c;它们用于处理元素的排队和出队&#xff0c;但是它们之间存在一些重要的区别&#xff0c;如下&#xff1a; 1、Queue…

HarmonyOS 创建components目录 定义全局自定义组件导出供整个项目使用

之前我的文章 harmonyOS 自定义组件基础演示讲解 我们讲解了 自定义组件的基础用法 但是 我们是写在单个page文件中的 这样 我们跨文件使用就很不友好了 如下图 指向 ets目录下 创建一个目录 按我们 前端开发以往的习惯 这个目录要叫 components 专门放组件集合的地方 然后 按…

《MySQL 简易速速上手小册》第3章:性能优化策略(2024 最新版)

文章目录 3.1 查询优化技巧3.1.1 基础知识3.1.2 重点案例3.1.3 拓展案例 3.2 索引和查询性能3.2.1 基础知识3.2.2 重点案例3.2.3 拓展案例 3.3 优化数据库结构和存储引擎3.3.1 基础知识3.3.2 重点案例3.3.3 拓展案例 3.1 查询优化技巧 让我们来聊聊如何让你的 MySQL 查询跑得像…

3.3-媒资管理之MinIo分布式文件系统上传视频

文章目录 媒资管理5 上传视频5.1 需求分析5.2 断点续传技术5.2.1 什么是断点续传5.2.2 分块与合并测试5.2.3 视频上传流程5.2.4 minio合并文件测试 5.3 接口定义5.4 上传分块开发5.4.1 DAO开发5.4.2 Service开发5.4.2.1 检查文件和分块5.4.2.2 上传分块5.4.2.3 上传分块测试 5.…

高并发对于服务器性能有什么要求?

随着互联网的普及和应用程序的复杂度增加&#xff0c;高并发已经成为许多应用程序必须面对的问题。高并发是指在短时间内有大量用户同时访问应用程序或数据库&#xff0c;对服务器性能提出了更高的要求。本文将探讨高并发对于服务器性能的要求。 一、高并发对服务器硬件的要求…

Javascript第十二个知识点:Dom

Dom --> document object model 文档对象模型 我们编写的HTML代码中&#xff0c;有许多标签&#xff0c;body、h1、p、div……都可以成为节点。 我们操控dom节点就是使用javascript去操控html里的每一个标签 那么我们该怎么操作dom节点呢&#xff1f; 获取dom节点 首先…

HDFS架构 之 元数据架构解析

1、内存Tree介绍啊 1.1 namenode启动流程 1.1.1 启动流程 1、加载fsimage文件 FsImage是一种持久化到磁盘上的文件,里面包含了集群大部分的meta数据,持久化的目的主要是为了防止meta数据丢失,也就是在HDFS不可用的情况下还能够保证绝大多数的数据是正常的。这个工作在Nam…

【Fabric.js】监听画布or元素的点击、选中、移动、添加、删除销毁、变形等各事件

在fabric使用过程中&#xff0c;如果想要玩各种花样&#xff0c;那么fabric的事件监听是一定、必须、肯定要掌握&#xff01;&#xff01;&#xff01; 例子就用vue项目组件里的代码&#xff0c;fabric的使用跟vue、react、angular之类的框架都没任何关系&#xff01; 并且本de…

极智芯 | 解读国产CPU系列汇总

欢迎关注我的公众号「极智视界」,获取我的更多技术分享 大家好,我是极智视界,本文分享一下 解读国产CPU系列汇总。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:https://t.zsxq.com/0aiNxERDq 最近执笔输出了一些 "解读国产 …

第205篇| 送给新年12条格言,一些有用的废话

这是2024年一月份flomo和notion 上聚合的系列文章 (01)&#xff1b; 具体方法用的是这个 &#xff1a; 【知识沙虫&#xff0c;一个简单易用的知识体系建模工具】https://mp.weixin.qq.com/s/V2Cdq-1PbMQYvpE4o9NLpQ 首先&#xff0c;方法用下来还是很给力的。输出很快。不过前…

隐私计算技术创新赋能金融数字化转型

文章目录 前言一、金融数据要素流通和价值发挥面临的挑战二、隐私计算技术助推金融场景建设向纵深发展(一)基于可验证秘密共享算法的跨机构数据联合统计(二)基于联邦半监督学习的沉睡客户挖掘模型(三)基于跨域数据校验算法的客户信息准确性验证(四)基于异构隐私计算平台…

SERVLET过滤器

SERVLET过滤器 全球因特网用户使用不同类型的Web浏览器访问应用服务器上存储的Web应用程序。每个浏览器根据对应的Web浏览器窗口中的设置显示应用程序中的信息。Web应用程序可能会有一些客户机的Web浏览器不支持的HTML标记或功能。这种情况下,应用程序在客户机的Web浏览器中可…

MIMIC-IV官方视图解析 - AKI 肌酐 (kdigo_creatinine、kdigo_stages)

判断AKI我们可以通过肌酐和尿量两个指标来看&#xff0c; 今天我们主要提取肌酐。 kidgo指南的表格 AKI诊断标准&#xff1a;符合以下情况之一者即可被诊断为AKI&#xff1a;①48小时内Scr升高超过26.5μmol/L(0.3mg/dl)&#xff1b;②Scr升高超过基线1.5倍——确认或推测为7…

利用Intersection Observer实现图片懒加载性能优化

ntersection Observer是浏览器所提供的一个 Javascript API&#xff0c;用于异步的检测目标元素以及祖先或者是顶级的文档视窗的交叉状态 这句话的意思就是&#xff1a; 我们可以看的图片当中&#xff0c;绿色的 target element&#xff08;目标元素&#xff09;&#xff0c;…