Leetcode-456-132模式(单调栈)

题目链接#


题目描述#

数组 nums ,共 n 个整数。
132 模式的子序列 由三个整数 nums[i]、nums[j] 和 nums[k] 组成,
并满足:i < j < k 和 nums[i] < nums[k] < nums[j] 。

如果 nums 中存在 132 模式的子序列 ,返回 true ;否则,返回 false 。

思路#

从后遍历数组,维护个单调栈 (s),O(n)..

  1. 单调栈从 栈顶->栈底 单调增。
  2. 作为 "2" 的元素要尽可能大,这样才更有可能遇到 "1".
  3. 用max2记录 "2" 的最大值,max2初始为无穷小。
  4. 当 nuns[i] > s.top(), 即 nums[i] 可能作为 "3", 把所有可能的 "2" 出栈,并更新 max2.
  5. 当 nums[i] < max2 时,即构成 "132" 模式的子序列。

C++代码#

class Solution {
public:
    bool find132pattern(vector<int>& nums) {
        stack<int> s;
        int len = nums.size();
        int max2 = INT_MIN;
        s.push(nums[len-1]);

        for (int i = len-2; i >= 0; i--) {
            if (nums[i] < max2)
                return true;
            while(!s.empty() && nums[i] > s.top()) {
                max2 = max(max2, s.top());
                s.pop();
            }
            s.push(nums[i]);
        }
        return false;
    }
};
posted @   ARUI丶  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示
主题色彩