给定一个整数序列:a1, a2, ..., an,一个132模式的子序列 ai, aj, ak 被定义为:当 i < j < k 时,ai < ak < aj。设计一个算法,当给定有 n 个数字的序列时,验证这个序列中是否含有132模式的子序列。
解题思路:这个题的主要思路是要逆向轮询数组,将最大的数存于栈中,置换出第二大的数,用一个变量sec保存,sec 初始值设为INT_MIN;然后我们一旦发现有元素小于sev,那么132模式就有了。
class Solution {
public:
bool find132pattern(vector<int>& nums) {
stack<int>s;
int sec=INT_MIN;
for(int i=nums.size()-1;i>=0;--i)
{
if(nums[i]<first)
return true;
while(!s.empty()&&nums[i]>s.top())//while循环很重要
{
sec=s.top();
s.pop();
}
s.push(nums[i]);
}
return false;
}
};