数据结构【单调栈】

 详细解读

至此我们可以解答最开始的疑问,单调栈的根本作用在于求得「每一个数字在原始序列中左 / 右边第一个大于 / 小于它自身的数字」,并且由于每一个数字只会入栈一次且最多出栈一次,因此总的时间复杂度为 O ( n ) 。

另外需要注意,一次「单调递增栈」的过程,可以求得每个数字左边第一个小于等于它的数,以及右边第一个小于它的数,此处需注意「小于等于」和「小于」的区别。除此之外,「单调递减栈」将上述的「小于」改为「大于」即可成立。
————————————————

int tt = 0;
for (int i = 1; i <= n; i ++ )
{while (tt && check(q[tt], i)) tt -- ;stk[ ++ tt] = i;
}

下一个更大元素 I

class Solution {
public:
vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {//首先构建一个单调栈 stack<int>stk;//使用vector来纪录当前对应各个元素下一个更大值的情况vector<int>q(nums2.size());//根据题意需要寻找右侧第一个目标值,所以从vector最后一个元素处理for (int i = nums2.size() - 1; i >= 0; i--) {int x = nums2[i];//根据题意,可设置为单调递减栈,即从栈底到栈顶为降序while (stk.size() && x >= stk.top()) stk.pop();//如果单调栈为空说明不存在符合条件的元素,返回-1if (stk.empty()) q[i] = -1;//当前栈顶元素为右侧第一个比当前x大的元素,并且记录在当前下标对应位置else q[i] = stk.top();//将当前元素入栈stk.push(x);}unordered_map<int, int> hash;for (int i = 0; i < nums2.size(); i++)hash[nums2[i]] = i;vector<int> res;for (auto x : nums1)res.push_back(q[hash[x]]);return res;}
};

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

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

相关文章

java名 java_Java Syncrhonisers

java名 java线程通信主要通过共享对字段和对象的访问来发生。 尽管这种通信方式非常高效&#xff0c;但它易于出现诸如线程干扰和内存一致性之类的错误。 同步是一种有助于防止此类错误的工具。 但是&#xff0c;同步不是免费提供的&#xff0c;并且在访问当前由另一个线程持有…

leetcode(二分查找算法专题)

二分模板一共有两个&#xff0c;分别适用于不同情况。 算法思路&#xff1a;假设目标值在闭区间[l, r]中&#xff0c; 每次将区间长度缩小一半&#xff0c;当l r时&#xff0c;我们就找到了目标值。 * 其中mid需要在while内部进行更新 * 最小R&#xff0c;最大L , R来加&…

html 完全复制div中的内容_LOL手游现在远非完全体,未来还有哪些端游内容会加入手游中?...

LOL手游上线已经有一段时间了&#xff0c;虽然绝大多数情况下LOL端游的内容被继承到了手游当中&#xff0c;但是仍然有一部分端游的内容尚未出现在手游之内。今天小编就带领大家来盘点一下&#xff0c;那些未来可能出现在手游当中的端游内容。排位赛ban选英雄机制Moba游戏排位赛…

因此,Oracle杀死了java.net

好吧&#xff0c;还没有……但是他们宣布要在2017年5月之前关闭java.net和 kenai。JohnK . Waters 在ADTmag的Kenai和java.net的“ Sunset”一文中接受了我的采访。 由于Oracle很少提供有关已经托管在java.net上的关键项目会发生什么的信息&#xff0c;因此本文中编写的大部分…

【Python科学计算系列】概率论与数理统计

计算排列数 def arrangement(n, m):if n m:return math.factorial(n)else:return math.factorial(n) / math.factorial(n - m) 计算组合数 def arrangement(n, m):return math.factorial(n) / (math.factorial(m) * math.factorial(n - m))

proc编译手册_Expect 手册 中文版

Expect 手册 中文版本文由gunman翻译&#xff0c;在此感谢&#xff5e;EXPECT(1)名字&#xff1a;Expect-----能与交互式程序进行“可程序化”会话的脚本语言大纲&#xff1a;(命令选项概述)expect [ -dDinN ] [ -c cmds ] [ -[f|b] ] cmdfile ] [ args ]概述&#xff1a;Expec…

光盘 机密_使用保险柜管理机密

光盘 机密您如何存储秘密&#xff1f; 密码&#xff0c;API密钥&#xff0c;安全令牌和机密数据属于秘密类别。 那是不应该存在的数据。 在容易猜测的位置&#xff0c;不得以纯文本格式提供。 实际上&#xff0c;不得在任何位置以明文形式存储它。 可以使用Spring Cloud Confi…

OS X下使用OpenGL做离屏渲染

本文为转载内容&#xff0c;原地址 有时&#xff0c;我们想通过GPU做一些视频、图像处理&#xff0c;而处理的结果不需要显示在显示器上&#xff0c;而是直接交给主存&#xff0c;这时候我们可以通过OpenGL的离屏渲染来实现。 由于我们不需要将渲染好的像素显示到屏幕上&…

jpa 循环引用_JPA中按身份引用

jpa 循环引用在上一篇文章中 &#xff0c;我提到我选择通过其主键而不是类型来引用其他聚合。 在处理大型或复杂域模型时&#xff0c;我通常使用这种方法&#xff08;也称为断开域模型&#xff09;。 在本文中&#xff0c;让我尝试进一步解释如何在JPA中完成它。 请注意&#x…

自然辩证法小论文选题_自然辨证法论文题目

与《自然辨证法论文题目》相关的范文2010年研究生课程论文 成绩: 题目:_中西医结合的发展前景_ _ 中西医结合的发展前景 [摘要]立足于中西医结合的现状,从方法论角度,就中西医融合的时间进行了探讨.中西医结合,是在我国既有传统的中医药学,又有现代的西医药学的特定环境和条件下…

Leetcode 14.最长公共前缀

原题链接 解题思路: 1.本题使用模拟法 2.取第一个字符串的首元素&#xff0c;与剩余字符串对应位置相比较&#xff0c;如果全部相等将此字符加入结果中&#xff0c;继续到下一个字符一次比较&#xff0c;直至出现不相同的位置&#xff0c;返回结果。 3.需要注意每个字符串是…

aws lambda_带有API网关的AWS Lambda

aws lambda在上一篇文章中&#xff0c;我向您展示了如何创建和部署AWS Lambda。 我们将继续这项工作&#xff0c;并只考虑更新该lambda的代码。 我们还将使用AWS API Gateway将REST端点添加到AWS Lambda。 因此&#xff0c;在继续之前……&#xff08;如果还没有&#xff09;&…

git pull不同步_git回退版本,再返回最新分支git pull失败的解决经验

本文转载自【微信公众号&#xff1a;羽林君&#xff0c;ID&#xff1a;Conscience_Remains】总述一篇解决gti分支切换问题的文章&#xff0c;大家应该都有过这种情况&#xff0c;就是git最新的代码进行编译的时候&#xff0c;发现最新代码有bug&#xff0c;有些不确认问题点&am…

junit5 动态测试_JUnit 5 –动态测试

junit5 动态测试在定义测试时&#xff0c;JUnit 4有一个很大的弱点&#xff1a;它必须在编译时发生。 现在&#xff0c;JUnit 5将解决此问题&#xff01; Milestone 1 刚刚发布 &#xff0c;它带有全新的动态测试&#xff0c;可以在运行时创建测试。 总览 本系列中有关JUnit 5…

ioc spring 上机案例_通过实例解析Spring Ioc项目实现过程

0. Ioc主要是实现一个控制反转&#xff0c;耦合性大大降低。1. 建maven项目建立一个空的maven项目&#xff0c;然后pom.xml添加spring-context的依赖:org.springframeworkspring-context5.2.7.RELEASE2. 创建pojo java对象package com.aca;public class Hello {private String …

C++ 11 深度学习(十)原始字面量

你是否曾经为了各种json格式无法写入string中而烦恼&#xff0c;为了各种转义而烦恼。如下图 c11为我们带来了全新的解决方法 其新特性为使用. R"(xxxxxxxxxxxx)" ,此种形式可以使得以原有形式进行表现出来

java日期时间转日期_Java时间和日期指南

java日期时间转日期长期以来&#xff0c;正确处理日期&#xff0c;时间&#xff0c;时区&#xff0c;夏令时&#xff0c;and年等一直是我的烦恼。 本文并不是一个全面的指南时域&#xff0c;请参阅日期和时间在Java中 -更详细&#xff0c;但略有下降&#xff0c;ekhem&#xff…

linux过滤端口抓包_Linux抓包工具tcpdump使用总结,WireShark的过滤用法

tcpdump与WireShark是Linux下的两个常用&#xff0c;功能强大的抓包工具&#xff0c;下面列出这两个工具的简单用法。tcpdump用法tcpdump用法&#xff1a;sudo tcpdump -i ens33 src 192.168.0.19 port 80 -xx -Xs 0 -w test.capsudo tcpdump -i ens33 src port 80 -xx -Xs 0 -…

C++ 11 深度学习(十一)final和override

1. final C 中增加了 final 关键字来限制某个类不能被继承&#xff0c;或者某个虚函数不能被重写&#xff0c;和 Jave 的 final 关键字的功能是类似的。如果使用 final 修饰函数&#xff0c;只能修饰虚函数&#xff0c;并且要把final关键字放到类或者函数的后面。 1.1 修饰函数…