解题思路:
132 i j k ai ak aj
维持一个ak(third) ,倒着遍历,将所有比third大的元素压到栈中——-如果当前数字小于third即pattern132中的 1找到了。如果当前数字大于栈顶元素,将栈顶元素赋值给third,然后将当前数字放到栈中———保证third在满足条件的同时值更大,这样更容易找first
bool find132pattern(vector<int>& nums) {
int n = nums.size();
if(n<=2)
return false;
stack<int> s;
int third = INT_MIN;
//倒着遍历
for(int i=n-1;i>=0;i--)
{
if(nums[i]<third)
return true;
else
{
while(!s.empty() && nums[i]>s.top())
{
third = s.top();
s.pop();
}
//栈中存放的都是比third大的元素
s.push(nums[i]);
}
}
return false;
}