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)吧. 不知道是我理解对不对.

转载于:https://www.cnblogs.com/lychnis/p/11603225.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值