zoukankan      html  css  js  c++  java
  • 456. 132 Pattern

     1 class Solution {
     2 public:
     3     bool find132pattern(vector<int>& nums) {
     4         stack<int> st;
     5         int s3=INT_MIN;
     6         for(int i=nums.size()-1;i>=0;--i) //逆序循环,因为s1必须是最小;方便下面判断s1<s3
     7         {
     8             if(nums[i]<s3) return true; //如果正向循环, 就得判断s3在中间
     9             else while(!st.empty()&&nums[i]>st.top()) //保证stack入栈顺序是越来越小;如果有比top大的则依次取出作为s3,直到大于nums[i]
    10             {
    11                 s3=st.top();
    12                 st.pop();
    13             }
    14             st.push(nums[i]);
    15         }
    16         return false;
    17     }
    18 };

    索引 i<j<k; 值分别为s1,s2,s3.

    要求值 s1<s3<s2;  s1最小s3最大;

    逆序循环是为了最后只判断s1是最小即可; 否则你就要判断s3, s3是中间值,有点麻烦;

    作者说是O(N)的space&time ; 但是这里有stack的操作,看起来并不是严格意义上的O(N)吧. 不知道是我理解对不对.

  • 相关阅读:
    单调递增的数字
    合并K个升序链表
    ISO 8 自适应cell
    动态计算UITableViewCell高度
    APP上传
    多线程 GCD队列组
    多线程 线程之间的通信
    多线程 GCD
    多线程 线程同步问题
    多线程 线程的状态
  • 原文地址:https://www.cnblogs.com/lychnis/p/11603225.html
Copyright © 2011-2022 走看看