代码随想录训练营Day 62|力扣739. 每日温度、496.下一个更大元素 I、503.下一个更大元素II

1.每日温度

代码随想录

代码:(单调栈)

class Solution {
public:vector<int> dailyTemperatures(vector<int>& temperatures) {stack<int> st;vector<int> result(temperatures.size(),0);// 找不到下一个最高温度的天用0来代替st.push(0);// 单调栈里放的是下标,为了正确计算天数差。而且访问元素也方便for(int i = 1; i < temperatures.size(); i++){if(temperatures[i] < temperatures[st.top()]){st.push(i);}else if(temperatures[i] == temperatures[st.top()]){st.push(i);}else {while(!st.empty() && (temperatures[i] > temperatures[st.top()])){result[st.top()] = i - st.top();st.pop();}st.push(i);}}return result;}
};

思路:

感觉这个单调栈的玩法有种消消乐的感觉(?

保证单调栈里的元素都是单调递增的,如果遇到一个比栈顶元素大的数据,就去消消乐,消到只剩比它大的元素。

易错点:消消乐的过程要用循环!!消完所有可以抵消的再将当前遍历元素入栈。

2.下一个更大元素

代码随想录

代码:(单调栈)

class Solution {
public:vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {stack<int> st;vector<int> result(nums1.size(),-1); // 不存在下一个更大元素返回-1unordered_map<int,int> umap;for(int i = 0; i < nums1.size(); i++){ // 建立nums1元素数值到下标的映射 后续用这种映射来找下标 然后填result数组umap[nums1[i]] = i;}st.push(0);for(int i = 1; i < nums2.size(); i++){if(nums2[i] < nums2[st.top()]){st.push(i);}else if(nums2[i] == nums2[st.top()]){st.push(i);}else{while(!st.empty() && nums2[i] > nums2[st.top()]){if(umap.count(nums2[st.top()]) > 0){ // 找umap里有没有这个元素(因为我们只要求nums2的子集即可,也就是nums1里的元素对应的result数组)result[umap[nums2[st.top()]]] = nums2[i];}st.pop();}st.push(i);}}return result;}
};

 思路:

这道题的难点就是要搞清楚result是填哪个数组(nums1)元素的对应值,入栈要求下一个最大元素的是哪个数组(nums2)。

因为题上说nums1是nums2的子集,而且数组元素而不相同,那么我们是可以通过元素值唯一对应到该元素值的下标的。也就是我们可以通过nums2的元素值(nums1是nums2的子集)来找到nums1对应元素的下标。

那么这种元素—下标的映射,就用unorder_map来记录。

和上一题一样,将nums2里的元素依次和栈顶元素作比较,进行对应的操作。如果遇到了栈不为空且当前元素比栈顶元素大的情况,就去看看nums1里有没有这个元素(看umap里有没有记录这个映射关系),如果有,就找到nums1的对应下标,将result里的相同下标的元素值赋值为当前nums2里遍历到的元素值。

易错点:将栈顶元素出栈的操作应该在if语句外,因为不管nums1里有没有这个元素,都要进行消消乐,满足单调栈的定义。将当前遍历的元素入栈,应该放在消消乐循环的外面,确保所有比它小的元素都被处理完了。

3.下一个更大元素2

 代码随想录

代码:  (单调栈)

class Solution {
public:vector<int> nextGreaterElements(vector<int>& nums) {stack<int> st;vector<int> result(nums.size(),-1);st.push(0);for(int i = 1; i < 2 * nums.size(); i++){if(nums[i % nums.size()] <= nums[st.top()]){st.push(i % nums.size());}else{while(!st.empty() && nums[i % nums.size()] > nums[st.top()]){result[st.top()] = nums[i % nums.size()];st.pop();}st.push(i % nums.size());}}return result;}
};

思路:

和每日温度的区别就是这里要求得是循环数组。

有两种办法,一个是把原数组复制一份拼上去。

一种是模拟遍历了两次数组,

模拟遍历两边nums,注意一下都是用i % nums.size()来操作

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

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

相关文章

FlinkCDC 3.1.0 与 Flink 1.18.0 安装及使用 Mysql To Doris 整库同步,使用 pipepline连接器

cd flink-cdc-3.1.0 bin/flink-cdc.sh 会用到 linux的系统环境变量&#xff08;vim /etc/profile配置&#xff09;&#xff0c;使用环境变量 FLINK_HOME flinkcdc & flink 安装及使用&#xff1a; 1、flink-cdc-3.1.0/lib/ 内容如下&#xff1a; 2、flink-cdc-3.1.0/mysql…

MS31211低压、大电流、单全桥驱动

MS31211 是一款低压、大电流、单全桥驱动。它 可应用于低电压及电池供电的运动控制场合&#xff0c;并且内 置电荷泵来提供内部功率 NMOS 所需的栅驱动电压。 MS31211 可以提供最高 3.2A 的峰值电流&#xff0c;其功 率电源供电范围从 1.8V 到 10V &#xff0c;逻…

JUC并发编程-第二天:线程高级部分

线程高级部分 线程不安全原子性可见性有序性&#xff08;指令重排&#xff09; 线程不安全 多线程下并发同时对共享数据进行读写&#xff0c;会造成数据混乱线程不安全 当多线程下并发访问临界资源时&#xff0c;如果破坏其原子性、可见性、有序性&#xff0c;可能会造成数据不…

JavaEE多线程(2)

文章目录 1..多线程的安全1.1出现多线程不安全的原因1.2解决多线程不安全的⽅法1.3三种典型死锁场景1.4如何避免死锁问题2.线程等待通知机制2.1等待通知的作用2.2等待通知的方法——wait2.3唤醒wait的方法——notify 1…多线程的安全 1.1出现多线程不安全的原因 线程在系统中…

前端练习小项目——视觉冲击卡片

前言&#xff1a; 前言&#xff1a;在学习完HTML和CSS之后&#xff0c;我们就可以开始做一些小项目了&#xff0c;本篇文章所讲的小项目为——视觉冲击卡片 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 先让我们看一下效果&a…

maxKb+ollama+lama2-chinese 基于知识库+本地模型的知识问答系统

maxKbollamalama2-chinese 基于知识库本地模型的知识问答系统 搭建步骤 搭建maxKb docker run -d --namemaxkb -p 8080:8080 -v ~/.maxkb:/var/lib/postgresql/data cr2.fit2cloud.com/1panel/maxkb# 用户名: admin # 密码: MaxKB123..github的访问地址&#xff1a;https://…

Vant2组件库的基础应用

目录 一、Picker 选择器 1.1、数组对象处理 1.2、每个选项颜色设置 二、滚动分页加载列表 三、Calendar 日历(可选范围限制) 四、input值过滤 官网&#xff1a;Vant 2 - Mobile UI Components built on Vue 一、Picker 选择器 官网示例数据&#xff1a; columns: [杭州…

计算机网络实验之单交换机互联终端实验

1.网线 4对&#xff0c;8根&#xff0c;RJ-45连接器&#xff08;水晶头&#xff09;&#xff1b; &#xff08;1&#xff09;直通线 双绞线缆两端按照EIA/TIA568B规格连接水晶头&#xff0c;该双绞线为直通线。 橘白1&#xff0c;橘2&#xff0c;绿白3&#xff0c;蓝4&#…

WPF学习(2)--类与类的继承2-在窗口的实现

一、代码分析 1.Animal.cs 1.1 代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace AnimalNamespace {public class Animal{public string Name { get; set; }public int Age { get; set…

RabbitMQ的简单使用 —— Python篇

&#xff08;一&#xff09;RabbitMQ的简介 RabbitMq 是实现了高级消息队列协议&#xff08;AMQP&#xff09;的开源消息代理中间件。消息队列是一种应用程序对应用程序的通行方式&#xff0c;应用程序通过写消息&#xff0c;将消息传递于队列&#xff0c;由另一应用程序读取 完…

JavaWeb项目配置教程

将你的项目&#xff08;只有代码的文件&#xff0c;不是整个文件&#xff09;拖入idea 找到数据库配置代码&#xff08;一般在Util包里面&#xff0c;或者是properties配置文件&#xff09;并将密码修改为你的数据库密码。 点击Edit Configurations 点击Configure&#xff0…

SOLIDWORKS安装运行环境建议 慧德敏学

SOLIDWORKS是一款要求很高的软件。无可否认。您的电脑功能越强大&#xff0c;运行得越好&#xff0c;但是我们也要考虑购买成本&#xff0c;因此&#xff0c;选择正确的配置很重要。在选择用于SOLIDWORKS的电脑配置时&#xff0c;需要综合考虑多个方面以确保软件能够流畅、以更…

leetcode动态规划 斐波那契数列

题意&#xff1a; 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 F(n) F(n - 1) F(n - 2)&#xff0c;其中…

【android】用 ExpandableListView 来实现 TreeView树形菜单视图

使用 ExpandableListView 来实现 TreeView 创建一个 ExpandableListAdapter 来为其提供数据。以下演示了如何使用 ExpandableListView 来展示树形结构的数据&#xff1a; 首先&#xff0c;在布局文件中添加 ExpandableListView&#xff1a; <ExpandableListViewandroid:i…

短剧app广告变现系统开发 源码搭建

短剧app广告变现系统的开发以及源码搭建是一个涉及多个技术领域的复杂过程。以下是一个大致的开发和搭建流程&#xff1a; 确定业务需求和目标&#xff1a; 明确短剧app的功能需求&#xff0c;例如短剧展示与播放、分享裂变与付费、投放与分销、内容与数据管理等功能1。确定广告…

Hi3861 OpenHarmony嵌入式应用入门--PWM 三色灯

这篇文章是讲解的pwm控制三色灯的部分&#xff0c;这部分也是后续全彩智能灯的基础。 硬件原理如下 IO管脚定义在hi-12f_v1.1.2-规格书-20211202.pdf文档中 GPIO API API名称 说明 unsigned int IoTGpioInit(unsigned int id); GPIO模块初始化 hi_u32 hi_io_set_func(hi_i…

无引擎游戏开发(2):最简游戏框架 | EasyX制作井字棋小游戏I

一、EasyX中的坐标系 不同于数理中的坐标系&#xff0c;EasyX中的y轴是竖直向下的 二、渲染缓冲区 之前的程序添加了这三个函数改善了绘图时闪烁的情况: 小球在"画布“上移动的过程就是我们在调用绘图函数&#xff0c;这个”画布“就是渲染缓冲区&#xff0c;先绘制的内…

AI在创造音乐

随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;其在音乐领域的应用也日益广泛&#xff0c;从音乐生成到声音合成&#xff0c;AI正逐渐成为音乐创作者的有力助手。然而&#xff0c;这一技术的兴起也引发了关于AI是否会毁掉音乐的讨论。以下从几个方面对这一…

【配置】Notion自动化备份到github方案

步骤 打开notion网页&#xff0c;获取到需要的值 token_v2 找到请求getSpaces的 Cookie 值 token_v2 space_id 找到请求getSpaces的响应结果space,如下图&#xff1a; file_token 找个页面点击导出&#xff0c;之后拿到这个配置项 注意&#xff1a;配置项会过期&#xff0c…

基于一种改进熵方法的旋转机械故障诊断模型(MATLAB)

熵的概念起源于热力学&#xff0c;1884年&#xff0c;玻尔兹曼定义熵&#xff0c;用以描述分子热运动的无序性和混乱度。1948年&#xff0c;Shannon在其发表的《AMathematicalTheoryofCommunication》中提出香农熵&#xff0c;首次将“熵”引入信息度量范畴&#xff0c;为信息论…