LeetCode 456. 132模式
原题链接
中等
作者:
大明湖的鱼
,
2021-03-24 10:54:44
,
所有人可见
,
阅读 407
思路:
- two 记录 132 中的2
- 单调栈维护当前比 2 大的 3,栈顶为3中的最小值
- 从后往前遍历,如果当前值比栈顶值大,two更新为栈顶值(之前的two(2)存的是是比栈(3)里小的,更新相当于把two变大),顺便把栈里的小于更新完后的two 的 值全部出栈(栈里全是序列中当前two以后而且比two大的元素)
- 如果当前值比栈顶值小,说明找到了1(two已被记录的情况下,这里如果只有三个元素123会怎么样,不会怎么样,这样的话two不会被更新,始终是INT_MIN,也就找不到比他小的1了。结果就是false)
- 一句话总结,two越大,越好找比他小的1
class Solution {
public:
bool find132pattern(vector<int>& nums) {
int n = nums.size();
if(n<3) return false;
stack<int> s;
int two = INT_MIN;
for(int i = n-1 ; i >= 0 ; i--){
if(nums[i]< two) return true;
else{
while(!s.empty() && nums[i] > s.top()){
two = s.top();
s.pop();
}
s.push(nums[i]);
}
}
return false;
}
};