• 456. 132 Pattern


    class Solution {
    public:
        bool find132pattern(vector<int>& nums) {
            int s3=INT_MIN;
            if(nums.size()<3)return false;
            vector<int> stack;
            for(int i=nums.size()-1;i>=0;--i)
            {
                if(nums[i]<s3)return true;
                else while(!stack.empty()&&nums[i]>stack.back())
                {
                    s3=stack.back();
                    stack.pop_back();
                }
                stack.push_back(nums[i]);
            }
            return false;
        }
    };

    1

    初看还以为挺简单, 当然我也整出一个办法, 就是遍历元素, 用set来排序, 每遍历到新元素,就判断set里面有没有比它大和比他小的元素然后判断下索引, 当然这办法太复杂了, 不高效

    2

    然后我就去discussion里面看答案, 果然是不得了 On的空间复杂度和时间复杂度.

    3

    作者说左边遍历或者右边遍历都可以,但是我是没搞定如果从左边遍历该怎么搞.

    由于连续三个递增的索引 abc, 要做到对应的值Va < Vc < Vb,  把a作为一组看,  bc作为一组看; 

    先简化下, 如果只让找出  Va<Vb,  是不是就很简单了, 这里把bc绑定在一起, 从右边向左遍历, 找出最大值和第二大的值设为bc就好了

    4

    使用栈或者说vector的目的就是为了保证元素顺序, s3变量代表的含义是Vc, 也就是 abc里面第三个元素, 索引最大, 但是值是第二大的, Vb值是最大的,永远位于vector中

  • 相关阅读:
    JQuery Ajax动态生成表格
    简单模拟JQuery框架
    事务和锁学习
    Js面向对象和数据类型内存分配
    Spring.Net学习 控制反转(IoC)和面向切面编程(AOP)
    html <pre>标签
    裸眼3D
    sysobjects syscolumns和SysTypes笔记
    JQuery EasyUi练习Demo(带源码)
    Oracle 游标使用大全
  • 原文地址:https://www.cnblogs.com/lychnis/p/9281625.html
Copyright © 2020-2023  润新知