题目地址
解题思路
参考宫水三叶
自己再捋一次:
原理:三次下标从小到大的数(不必相邻),要满足数量级:小大中 的关系
那要如何去实现呢?
我们可以将132(小大中) 借指为i,j,k
,我们利用stack
这一数据结构来实现单调数组。栈中存储的数据是按照从栈底到栈顶 非递减 的方式储存的,每当nums[i]
(i从数组右侧开始计数)大于栈顶的元素时,我们将栈顶元素pop()
出来,并赋值给K
,再将nums[i]
压入栈中。当我们搜索到存在某个nums[i]<k
时,我们就返回true
。而当遍历完整个数组都没有返回true
时,我们返回false
。
具体实现思路和代码可以参考上面的 宫水三叶 大佬的链接,也可以看本文中所贴代码。
代码实现(C++)
class Solution {
public:
bool find132pattern(vector<int>& nums)
{
stack<int> st;
int n=nums.size();
int k=INT_MIN;
for(int i=n-1;i>=0;i--)
{
if(nums[i]<k)
{
return true;
}
while(!st.empty() && st.top()<nums[i])
{
k=st.top();
st.pop();
}
st.push(nums[i]);
}
return false;
}
};