给你一个 n 个整数的序列 a1,a2,...,an,一个 132
模式是对于一个子串 ai,aj,ak,满足 i
< j
< k
和 ai
< ak
< aj
。设计一个算法来检查输入的这 n 个整数的序列中是否存在132模式。n
会小于 20,000
。
样例
给你序列 nums = [1,2,3,4]
返回 False
//没有132模式在这个序列中。
给你序列 nums = [3,1,4,2]
返回 True
//存在132模式:[1,4,2]。
这道题还是花了很久的,主要是栈用的不够熟练,没想到这种题怎么结合栈来解
1 bool find132pattern(vector<int> &nums) { 2 // write your code here 3 if(nums.size()<3){ 4 return false; 5 } 6 7 stack<int> s; 8 int third=INT_MIN;//first,second,third; second>third>first -> true 9 for(int i=nums.size()-1;i>=0;i--){ 10 if(nums[i]<third){ 11 return true; 12 } 13 else{ 14 while(!s.empty() && nums[i]>s.top()){ 15 third=s.top(); 16 s.pop(); 17 } 18 } 19 s.push(nums[i]); 20 } 21 return false; 22 }