首页 > 其他分享 >456. 132模式

456. 132模式

时间:2023-11-30 15:57:32浏览次数:35  
标签:maxx nums int 栈顶 模式 132 456

456. 132模式

2021年3月24日

1e4的数据,我\(O(n^2)\)都能给你过了,就不能1e5的数据吗

单调栈经典例题(๑•̀ㅂ•́)و√

倒着遍历,维护一个递减的单调栈。

两个方法:

第一个方法

  • 记录所有从栈里弹出的所有数的最大值\(maxx\),这个是2
  • 栈顶就是3
  • 将要进的值\(nums[i]\),如果\(<maxx\),那么这个值就是1
  • 否则就进栈。
  • 这样子可以一直保证,\(maxx\)是2,栈顶是3
class Solution {
private:
    stack<int>q;
public:
    bool find132pattern(vector<int>& nums) {
        int maxx=INT_MIN;
        int n=nums.size();
        for(int i=n-1;i>=0;i--){
            if(maxx>nums[i])
                return true;
            while(!q.empty()&&q.top()<nums[i])
                maxx=max(maxx,q.top()),q.pop();
            q.push(nums[i]);
        }
        return false;
    }
};

第二个写法

  • 首先先正着遍历,记录\(nums[i]\)前的最小值,记录到\(v[i]\)里。
  • 依然是维护一个递减的单调栈
  • 倒着遍历,这里注意的是,我们比较的是栈顶和\(v[i]\)的大小
    • 如果栈顶小于等于\(v[i]\),显然栈顶不符合2的条件,故将其弹出
    • 当栈顶大于\(v[i]\)时,栈顶符合2的条件
    • 再比较即将进入的\(nums[i]\)和栈顶的大小,如果栈顶小,我们就找到了答案
class Solution {
private:
    stack<int>q;
public:
    bool find132pattern(vector<int>& nums) {
        int maxx=INT_MIN;
        int n=nums.size();
        vector<int>v(n);
        v[0]=nums[0];
        for(int i=1;i<n;i++)
            v[i]=min(v[i-1],nums[i-1]);
        
        for(int i=n-1;i>=0;i--){
            while(!q.empty()&&q.top()<=v[i])
                q.pop();
            if(!q.empty()&&q.top()<nums[i])
                return true;
            q.push(nums[i]);
        }
        return false;
    }
};

标签:maxx,nums,int,栈顶,模式,132,456
From: https://www.cnblogs.com/CrossAutomaton/p/17867532.html

相关文章

  • 大屏项目的搭建心得,使用img的填充模式来实现大屏自适应。
    借鉴了图片的两种填充模式cover和contain文档介绍https://developer.mozilla.org/zh-CN/docs/Web/CSS/object-fitcontain:被替换的内容将被缩放,以在填充元素的内容框时保持其宽高比。整个对象在填充盒子的同时保留其长宽比。cover:被替换的内容在保持其宽高比的同时填充......
  • 编程设计模式中,工厂方法模式为什么叫工厂方法?(AI)
    来自你的消息:编程设计模式中,工厂方法模式为什么叫工厂方法?来自WeTabAI的消息:工厂方法模式是一种常用的面向对象设计模式,它被称为工厂方法是因为在这种模式中,我们将对象的创建过程封装到一个工厂类中,通过工厂类来创建对象。工厂方法模式的核心思想是定义一个用于创建对象的......
  • Windows下读文件二进制模式和文本模式的区别
    前段时间,碰到了一个奇怪的事情,我实现了一个读某文件的类,原本这个文件是以二进制写的,读的时候没太在意,将模式少写了一个“b”,变成了文本模式_tfopen_s(&pFile,m_file,_T("r"))测试了好些文件都没有问题,直到有一天,一同事反应读取函数有问题,数据被截断了。我看了半天,百思不得其......
  • 国密算法SM4的GCM模式加密解密实现
    importorg.bouncycastle.util.encoders.Hex;importjava.util.Arrays;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassSM4Utils{/***默认SECRET_KEY*secretKey必须为16位,可包含字母、数字、标点*/ privatestat......
  • 简单工厂模式
    软件设计                 石家庄铁道大学信息学院 实验2:简单工厂模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解简单工厂模式的动机,掌握该模式的结构;2、能够利用简单工厂模式解决实际问题。 [实验任务一]:女娲造人使用简单工厂模......
  • 工厂方法模式
    软件设计                 石家庄铁道大学信息学院 实验3:工厂方法模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解工厂方法模式的动机,掌握该模式的结构;2、能够利用工厂方法模式解决实际问题。 [实验任务一]:加密算法目前常用的加密......
  • 抽象工厂模式
    软件设计                 石家庄铁道大学信息学院 实验4:抽象工厂模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解抽象工厂模式的动机,掌握该模式的结构;2、能够利用抽象工厂模式解决实际问题。 [实验任务一]:人与肤色使用抽象工厂模......
  • 建造者模式
    软件设计                 石家庄铁道大学信息学院 实验5:建造者模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解建造者模式的动机,掌握该模式的结构;2、能够利用建造者模式解决实际问题。 [实验任务一]:计算机组装使用建造者模式,完成......
  • 命令模式
    [实验任务一]:多次撤销和重复的命令模式某系统需要提供一个命令集合(注:可以使用链表,栈等集合对象实现),用于存储一系列命令对象,并通过该命令集合实现多次undo()和redo()操作,可以使用加法运算来模拟实现。1. 提交类图;2.提交源代码;#include<iostream>#include<stack>usingn......
  • 适配器模式
    1模式动机在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。如何应对这种“迁移的变化”?如何既能利用现有对象(老接口)的良好实现,同时又能满足新的应用环境所要求的接口?Adapter模式主要应用于“......