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

一、LeetCode739. 每日温度

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

状态:已解决

1.思路 

       如果有同学学过单调栈的话这道题还是能看出明显解法的,因为需要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置。

单调栈的本质是空间换时间,因为在遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素,优点是整个数组只需要遍历一次。

更直白来说,就是用一个栈来记录我们遍历过的元素,因为我们遍历数组的时候,我们不知道之前都遍历了哪些元素,以至于遍历一个元素找不到是不是之前遍历过一个更小的,所以我们需要用一个容器(这里用单调栈)来记录我们遍历过的元素。

在使用单调栈的时候首先要明确如下几点:

(1)单调栈里存放的元素是什么?

单调栈里只需要存放元素的下标i就可以了,如果需要使用对应的元素,直接T[i]就可以获取。

(2)单调栈里元素是递增呢? 还是递减呢?(以栈头到栈底的方向)

        这里我们要使用递增循序(再强调一下是指从栈头到栈底的顺序),因为只有递增的时候,栈里要加入一个元素i的时候,才知道栈顶元素在数组中右面第一个比栈顶元素大的元素是i。

即:如果求一个元素右边第一个更大元素,单调栈就是递增的,如果求一个元素右边第一个更小元素,单调栈就是递减的。

(3)使用单调栈主要有三个判断条件。

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

        具体演示过程可以看文章讲解。

        此题由于是要找到右边的第一个比自己大的元素,故单调栈应该是递增的,且当当前元素大于栈顶时,代表找到了比前面的元素大的第一个元素,那么开始弹出栈内元素,那么弹出来的元素对应的右边比它第一大的元素的下标就为当前元素的下标,直到栈内元素不再小于当前元素时(即当前元素不再大于现在的栈顶元素),停止出栈,并把当前元素压入栈内(相当于一个单调数组找到插入位置后将元素插入进去)。

2.代码实现

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

时间复杂度:O(n)

空间复杂度:O(n)

二、496.下一个更大元素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

状态:已解决

1.思路 

        这道题其实就相当于求nums2每个元素的右边比它大的第一个元素对应的,然后根据nums1在nums2中的对应位置,把nums2每个元素对应的求解结果赋给nums1的对应元素即可。

        这里我们简化一下,在求出一个nums2的某个位置的结果时,就看nums1里有没有相等值,有的话就把这个结果直接赋给nums1的对应位置,不需要先算出nums2的结果再求nums1的对应结果。

2.代码实现

class Solution {
public:vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {stack<int> s;vector<int> result(nums1.size(),-1);if(nums1.size() == 0) return result;unordered_map<int,int> map;for(int i=0;i<nums1.size();i++){map[nums1[i]] = i;}s.push(0);for(int i=1;i<nums2.size();i++){if(nums2[i] <= nums2[s.top()]){s.push(i);}else{while(!s.empty() && nums2[i]>nums2[s.top()]){if(map.count(nums2[s.top()]) > 0){ //看这个nums2的值在nums1中是否出现result[map[nums2[s.top()]]] = nums2[i];}s.pop();}s.push(i);}}return result;}
};

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

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

相关文章

【深度学习】Diffusion扩散模型原理解析1

1、前言 diffusion&#xff0c;这几年一直很火的模型&#xff0c;比如这段时间在网上的文生图大模型——Stable diffusion。就是以diffusion作为基底模型&#xff0c;但由于该模型与VAE那边&#xff0c;都涉及了较多了概率论知识&#xff0c;实在让人望而却步。所以&#xff0…

线路和绕组中的波过程(二)

本篇为本科课程《高电压工程基础》的笔记。 本篇为这一单元的第二篇笔记。上一篇传送门。 行波通过串联电感与旁路并联电容 由于并联电容或串联电感的存在&#xff0c;线路上传播的行波会发生幅值和波形的变化。 直角波通过串联电感 有一个无限长的直角波 U 1 f U_{1f} U1…

C语言 | Leetcode C语言题解之第82题删除排序链表中的重复元素II

题目&#xff1a; 题解&#xff1a; struct ListNode* deleteDuplicates(struct ListNode* head) {if (!head) {return head;}struct ListNode* dummy malloc(sizeof(struct ListNode));dummy->next head;struct ListNode* cur dummy;while (cur->next && cu…

vue----- watch监听$attrs 的注意事项

目录 前言 原因分析 解决方案 总结 前言 在 Vue 开发过程中&#xff0c;如遇到祖先组件需要传值到孙子组件时&#xff0c;需要在儿子组件接收 props &#xff0c;然后再传递给孙子组件&#xff0c;通过使用 v-bind"$attrs" 则会带来极大的便利&#xff0c;但同时…

js代码中关于async await的滥用 async await的滥用

概念&#xff1a; 返回值&#xff1a; async返回一个promise---这个返回值是默认自发行为 async function name1(params) {console.log(params) } let result name1(lion) console.log(result) // Promise { undefined } result.then(res > console.log(res)) // undefin…

设计模式 六大原则之单一职责原则

文章目录 概述代码例子小结 概述 先看下定义吧&#xff0c;如下&#xff1a; 单一职责原则的定义描述非常简单&#xff0c;也不难理解。一个类只负责完成一个职责或者功能。也就是说在类的设计中&#xff0c; 我们不要设计大而全的类,而是要设计粒度小、功能单一的类。 代码例…

灯珠CCD或CMOS成像RGB数据 光谱重建

1. 源由 本文主要为了通过摄像头CCD或者CMOS传感器对灯珠成像数据分析、重建灯珠可见光范围光谱数据的研究&#xff0c;从原理和方法上论证可行性。 随着照明技术迅猛发展&#xff0c;LED技术日渐成熟。LED产品由于具备经久耐用、节能且价格低等优势&#xff0c;已成为照明行…

传输层之 TCP 协议

TCP协议段格式 源/目的端口号&#xff1a;表示数据是从哪个进程来&#xff0c;到哪个进程去。 序号&#xff1a;发送数据的序号。 确认序号&#xff1a;应答报文的序号&#xff0c;用来回复发送方的。 4 位首部长度&#xff1a;一个 TCP 报头&#xff0c;长度是可变的&#xff…

2024年汉字小达人活动还有4个多月开赛:来做18道历年选择题备考吧

不出特殊情况的话&#xff0c;距离2024年第11届汉字小达人比赛还有4个多月的时间&#xff0c;如何利用这段时间有条不紊地备考呢&#xff1f;我的建议是两手准备&#xff1a;①把小学1-5年级的语文课本上的知识点熟悉&#xff0c;重点是字、词、成语、古诗。②把历年真题刷刷熟…

脆皮之“指针和数组的关系”

文章目录 1. 数组名的理解2. 使用指针访问数组3. 一维数组传参的本质4. 冒泡排序5. 二级指针6. 指针数组7. 指针数组模拟二维数组 hello&#xff0c;大家好呀&#xff0c;窝是脆皮炸鸡。这一期是关于数组和指针的&#xff0c;我觉得并不是很难&#xff0c;但是我觉着下一期可能…

自定义el-select下拉菜单的内容以及数据回显的内容

最终的效果 下拉选项的自定义内容好实现&#xff0c;因为他有默认插槽&#xff0c;所以直接在el-option标签里面写自定义内容就可以实现 <el-selectref"seriesBorderTypeRef"class"series-border-type"change"changeSeriesBorderType"v-model…

程序设计---二分

整数二分&#xff08;重点在边界&#xff09; 本质并不是单调性&#xff0c;有单调性一定可以二分&#xff0c;有二分不一定有单调性。 二分的本质是边界&#xff0c; 将整个区间一分为二&#xff0c;一半满足&#xff0c;一半不满足。 那么我们可以找到这个性质&#xff0…

Rust - 终端输入、文件读写

文章目录 查看参数接收终端输入读取文件写入文件 查看参数 fn main() { let args std::env::args();println!("{:?}", args); // Args { inner: ["target/debug/rt"] }for arg in args {println!("{}", arg);} }接收终端输入 use std::io:…

【已解决】chrome/其他浏览器:你的连接不是私密连接

一、问题原因 这个问题一般是https的网址会有&#xff0c;它是安全的访问连接&#xff0c;在原来的基础上SSL/TLS协议进行加密和身份验证。 这里可能是证书过期了&#xff0c;其实 二、解决方法【亲测有效】 方法1&#xff1a;点击高级&#xff0c;如果有继续访问对应的http…

ESLint: Unexpected ‘debugger‘ statement.(no-debugger)(debugger报红)

ESLint: Unexpected debugger statement.(no-debugger) 解决办法&#xff1a; 找到.eslintrc.js文件中rules的no-debugger更改为0即可

gpustat 不能使用问题

突然间就不能用了&#xff0c;可能是环境出了问题&#xff0c;如果GPU没问题的话&#xff0c;那么换个环境重新安装试一下&#xff08;pip install gpustat&#xff09;&#xff0c;目前是换个环境就可以了&#xff08;做个笔记&#xff09;

两正序列元素之和比值的上下界——小于等于其元素之比的最大值,大于等于元素之比的最小值

对于两个正数序列&#xff08;集合&#xff09; { a 1 , a 2 , . . . , a l } \{a_1,a_2,...,a_l\} {a1​,a2​,...,al​} 和 { b 1 , b 2 , . . . , b l } \{b_1,b_2,...,b_l\} {b1​,b2​,...,bl​} &#xff0c;满足 min ⁡ i a i b i ≤ ∑ i 1 l a i ∑ i 1 l b i ≤ …

信息系统项目管理师0101:项目建议与立项申请(7项目立项管理—7.1项目建议与立项申请)

点击查看专栏目录 文章目录 第七章 项目立项管理7.1项目建议与立项申请1.立项申请概念2.项目建议书内容记忆要点总结第七章 项目立项管理 项目立项管理是对拟规划和实施的项目技术上的先进性、适用性,经济上的合理性、效益性,实施上的可能性、风险性以及社会价值的有效性、可…

代码随想录算法训练营第三十五天| 435. 无重叠区间 763.划分字母区间 56. 合并区间

435. 无重叠区间 题目链接 思路 遍历数组&#xff0c;如果i的右区间大于i-1的左区间&#xff0c;就没有重叠&#xff0c;需要更新左区间 解题方法 遍历数组&#xff0c;如果i的右区间大于i-1的左区间&#xff0c;就没有重叠&#xff0c;需要更新左区间 Code class Solut…

在线教育系统平台网址,:在线教育如何巧用积分功能做营销活动?

在系统面世的三年多时间内&#xff0c;已服务了众多知识店铺创业者、运营者在自己领域内小有所成&#xff0c;但运用特色的营销功能与营销活动结合使用却仍让很多老师感到无解。作为在线教育技术服务商&#xff0c;一直致力于开发出更多功能去帮助机构解决在实际运营中遇到的问…