分析
本题的单调栈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;
}
};
这篇博客探讨了一种利用单调栈解决数组中132模式的算法。单调栈从大到小排列,同时维护第二小的值。当新元素小于第二小值时,可能存在132模式。通过C++代码展示了如何遍历数组并检查132模式的存在,返回相应的判断结果。
249

被折叠的 条评论
为什么被折叠?



