• LeetCode456:132模式(单调栈)


     解题思路:根据题意,我们首先首先要找到所有的极大值点,同时记录当前极大值点的左边的最小值。遍历所有点,看是否能够满足132条件。虽然记录极大值点的地方可以优化,减小比较的次数,但是由于我们不知道极大值点有可能有多少个,复杂度可能还是会比较大。

    最关键的优化地点是如何减少比较的次数,我们需要用单调栈维护一个[i,n]区间的单调递减的栈,目的是找到极值点 i 在[i,n]区间小于 nums[i]的最大值所以我们需要从数组的尾部开始向前构建一个单调栈。我们从之前的解法可以知道极值点在后面的最小值一定比极值点在前面的最小值要小,因此,如果栈中的较小的元素满足不了后面的极值点的132条件,那么就不需要担心弹出栈之后,会满足前面的极值点的132条件。(AC代码并不是这个版本的,在此仅做记录,等到重新做的时候再补。)

    class Solution:
        def find132pattern(self, nums):
            stack = [] #
            inf = 1e9+10
            mini = inf
            for i in range(len(nums)):
                if mini > nums[i]:
                    mini = nums[i]
                if i !=len(nums)-1 and i !=0:
                    if nums[i] >nums[i-1] and nums[i] > nums[i+1]:
                        while stack:
                            if stack[-1][0] < nums[i]:
                                stack.pop()
                            else:
                                break
                        stack.append((nums[i],mini))
                for s in stack:
                    if s[0] > nums[i] > s[1]:
                        return True
            return False
  • 相关阅读:
    Windows10下Opencv4+CMake+MinGW64+VSC安装教程
    相机标定问题-实践操作流程
    eNSP仿真学习,网络入门!
    SFTP服务的使用!!
    树莓派B+使用入门&RPI库安装&wringPi库安装
    Python基本语法初试
    基于51单片机+DAC0832的信号发生器
    各种标志位的含义
    根文件系统ramdisk.image.gz && uramdisk.image.gz
    Linux中/etc/inittab文件
  • 原文地址:https://www.cnblogs.com/ISGuXing/p/14573922.html
Copyright © 2020-2023  润新知