LeetCode 456. 132模式(逆序遍历+单调栈)
发布日期:2021-07-01 03:23:47 浏览次数:2 分类:技术文章

本文共 969 字,大约阅读时间需要 3 分钟。

1. 题目

给定一个整数序列:a1, a2, …, an,一个132模式的子序列 ai, aj, ak 被定义为:当 i < j < k 时,ai < ak < aj

设计一个算法,当给定有 n 个数字的序列时,验证这个序列中是否含有132模式的子序列。

注意:n 的值小于15000。示例1:输入: [1, 2, 3, 4]输出: False解释: 序列中不存在132模式的子序列。示例 2:输入: [3, 1, 4, 2]输出: True解释: 序列中有 1 个132模式的子序列: [1, 4, 2].示例 3:输入: [-1, 3, 2, 0]输出: True解释: 序列中有 3 个132模式的的子序列: [-1, 3, 2], [-1, 3, 0] 和 [-1, 2, 0].

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/132-pattern

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

在这里插入图片描述

当5要入栈时,不满足递减了
更新第二大数Ak为栈顶,弹栈,继续检查,最后栈内空,Ak=4,push 5
下一个数 3 < Ak(第二大),存在

class Solution {
public: bool find132pattern(vector
& nums) {
if(nums.size() < 3) return false; stack
s;//单调递减栈 int Ak = INT_MIN;//第二大的数 for(int i = nums.size()-1; i >= 0; --i) {
if(Ak > nums[i]) return true; while(!s.empty() && nums[i] > s.top()) {
Ak = s.top(); s.pop(); } s.push(nums[i]); } return false; }};

36 ms 17.5 MB

转载地址:https://michael.blog.csdn.net/article/details/105688840 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:LeetCode 447. 回旋镖的数量(哈希map+组合数)
下一篇:LeetCode 987. 二叉树的垂序遍历(递归/循环)

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月18日 18时00分51秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

x265-1.7版本-encoder/frameencoder.h注释 2019-05-02
x265-1.7版本-encoder/motion.cpp注释 2019-05-02
高阶函数 2019-05-02
继承和多态 2019-05-02
获取对象信息 2019-05-02
实例属性和类属性 2019-05-02
使用__slots__ 2019-05-02
使用@property 2019-05-02
多重继承 2019-05-02
定制类 2019-05-02
使用枚举类 2019-05-02
使用元类 2019-05-02
错误、调试和测试 2019-05-02
StringIO和BytesIO 2019-05-02
SMTP发送邮件 2019-05-02
POP3收取邮件 2019-05-02
访问数据库 2019-05-02
使用SQLite 2019-05-02
使用MySQL 2019-05-02
使用SQLAlchemy 2019-05-02