分析
本题的单调栈maxv是一个由小到大的栈,栈顶元素最小。同时设置一个第二小值secv,用于做进一步判断。
一个元素nums[i]进来,如果其比栈顶元素还大,则让栈顶元素出栈,直到栈顶元素大于该nums[i]
如果在一次循环中nums[i]小于secv,说明:
如果到最后都没有找到,那么输出false
C++ 代码
class Solution {
public:
bool find132pattern(vector<int>& nums) {
int n = nums.size();
if(n<3) return false;
stack<int> maxv;
int secv=INT_MIN; //刚开始第二大的数设为最小值
for(int i=n-1;i>=0;i--)
{
if(nums[i]<secv) return true; //出现以上图示的情形,输出true
while(maxv.size() && nums[i]>maxv.top()) //当前nums[i]比栈顶元素大
{
secv=maxv.top(); //更新第二大值
maxv.pop(); //栈顶元素出栈
}
maxv.push(nums[i]); //当前元素nums[i]入栈
}
return false;
}
};