zoukankan      html  css  js  c++  java
  • 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中

  • 相关阅读:
    企业站前端——总结
    visual studio插件 visual assistx
    github 预览html
    Resharper
    c#解析json
    Visual Studio 2015 RC Downloads
    C#位运算讲解与示例
    java 位运算权限管控(转载)
    双机热备
    c# 代码执行时间
  • 原文地址:https://www.cnblogs.com/lychnis/p/9281625.html
Copyright © 2011-2022 走看看