Python|单调栈判断132模式

简介: Python|单调栈判断132模式

问题描述

给定一个整数序列:a1, a2, ..., an,一个132模式的子序列 ai, aj, ak 被定义为:当 i < j < k 时,ai < ak < aj。设计一个算法,当给定有 n 个数字的序列时,验证这个序列中是否含有132模式的子序列。

示例1:

输入: [1, 2, 3, 4]

输出: False

解释: 序列中不存在132模式的子序列。

示例 2:

输入: [3, 1, 4, 2]

输出: True

解释: 序列中有 1 个132模式的子序列:[1, 4, 2].


解决方案

简单来说,就是在所给序列中,有没有某一个长度为3的子序列符合中间大于两边,右边大于左边。

也就是说,找到一个元素A, 在它左边有比它小的元素B,在它右边也有比它小的元素C, 并且B要小于C。

但暴力法容易超时。这里可以利用单调减栈,倒着遍历数组,当数组某个元素大于单调减栈的最大值时,这个元素就相当于A,单调减栈的最大值相当于C,而且这个C是A右边区域的最大值,更容易找到比它小的元素,接着遍历,如果出现比元素C还小的值,就找到了元素A,返回True

代码示例:

class Solution:

    def find132pattern(self, nums: List[int]) -> bool:

        stack = []

        # 设置m的初始值为负无穷

        m = float('-inf')

        for i in range(len(nums)-1, -1, -1):

            if nums[i] < m:

                return True

            while stack and nums[i] > stack[-1]:

                m = stack.pop()

            stack.append(nums[i])

        return False


结语

这道题给人的感觉很简单,但直接使用暴力法找所需的三个数很容易超时。这里利用的是单调减栈,这样理论上在遍历过程中可以同时找到最大的元素和右边次大的元素,如果找到了,那么接着遍历找到比右边次大的元素要小的元素是比较容易的。



目录
相关文章
|
2月前
|
开发者 Python
Python中的match-case语句:更优雅的模式匹配
Python中的match-case语句:更优雅的模式匹配
|
7月前
|
数据采集 监控 数据安全/隐私保护
Python正则表达式:用"模式密码"解锁复杂字符串
正则表达式是处理字符串的强大工具,本文以Python的`re`模块为核心,详细解析其原理与应用。从基础语法如字符类、量词到进阶技巧如贪婪匹配与预定义字符集,结合日志分析、数据清洗及网络爬虫等实战场景,展示正则表达式的强大功能。同时探讨性能优化策略(如预编译)和常见错误解决方案,帮助开发者高效掌握这一“瑞士军刀”。最后提醒,合理使用正则表达式,避免过度复杂化,追求简洁优雅的代码风格。
169 0
|
11月前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现智能食品消费模式分析的深度学习模型
使用Python实现智能食品消费模式分析的深度学习模型
292 70
|
8月前
|
存储 安全 搜索推荐
课时15:Python的交互模式
今天给大家带来的分享是 Python 的交互模式以及计算机对 Python 的开发,分为以下三个部分。 1.Python的介绍 2.Python的结构 3.保存代码
136 2
|
12月前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###
|
11月前
|
机器学习/深度学习 数据采集 数据挖掘
使用Python实现智能食品消费模式预测的深度学习模型
使用Python实现智能食品消费模式预测的深度学习模型
206 2
|
算法 数据挖掘 Python
Python中的拟合技术:揭示数据背后的模式
Python中的拟合技术:揭示数据背后的模式
221 0
Python中的拟合技术:揭示数据背后的模式
|
存储 缓存 Java
深度解密 Python 虚拟机的执行环境:栈帧对象
深度解密 Python 虚拟机的执行环境:栈帧对象
233 13
|
数据可视化 算法 JavaScript
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
本文探讨了如何利用图论分析时间序列数据的平稳性和连通性。通过将时间序列数据转换为图结构,计算片段间的相似性,并构建连通图,可以揭示数据中的隐藏模式。文章介绍了平稳性的概念,提出了基于图的平稳性度量,并展示了图分区在可视化平稳性中的应用。此外,还模拟了不同平稳性和非平稳性程度的信号,分析了图度量的变化,为时间序列数据分析提供了新视角。
312 0
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
|
设计模式 机器学习/深度学习 算法
现代 Python:编写高效代码的模式、功能和策略(第 1 部分)
现代 Python:编写高效代码的模式、功能和策略(第 1 部分)
109 1

推荐镜像

更多
下一篇
开通oss服务