# Leetcode 132 Pattern problem solution

In this Leetcode 132 Pattern problem solution you are given an array of n integers nums, a 132 pattern is a subsequence of three integers nums[i], nums[j] and nums[k] such that i < j < k and nums[i] < nums[k] < nums[j].

Return true if there is a 132 pattern in nums, otherwise, return false.

## Problem solution in Python.

```class Solution:

def find132pattern(self, nums) -> bool:
stk = []
top = -float("inf")

for i in range(len(nums) -1, -1, -1):
if top > nums[i]:
return True

while(len(stk) and nums[i] > stk[len(stk) -1]):
top = stk.pop()
stk.append(nums[i])
return False
```

## Problem solution in Java.

```class Solution {
public boolean find132pattern(int[] nums) {

if(nums==null||nums.length<3) return false;
int[] min=new int[nums.length];
int[] max=new int[nums.length];
min[0]=nums[0];
max[0]=nums[0];
for(int i=1;i<nums.length;i++){
if(nums[i]>=max[i-1]){
max[i]=nums[i];
min[i]=min[i-1];
}
else if(nums[i]<=min[i-1]){
min[i]=nums[i];
max[i]=max[i-1];
}
else{
int j=0;
for( j=i-1;j>=1;j--){
if(nums[j]>nums[i])
break;
}
if(j>=1&&min[j-1]<nums[i])
return true;
max[i]=max[i-1];
min[i]=min[i-1];
}
}
return false;
}
}
```

## Problem solution in C++.

```class Solution {
public:
bool find132pattern(vector<int>& nums) {
int n = nums.size();
vector<int> min_array(n);
min_array[0] = nums[0];
for(int i = 1; i < n; i++) {
min_array[i] = min(min_array[i-1], nums[i]);
}
vector<int> st;
for(int i = n-1; i >= 0; i--) {
if(!st.empty() && nums[i] > min_array[i] && nums[i] < st.back() &&
min_array[i] < st.back()) st.push_back(nums[i]);
else  if(st.empty()) st.push_back(nums[i]);
else if(nums[i] == min_array[i]) continue;
else {
while(!st.empty() && nums[i] > st.back() && st.back() <= min_array[i]) st.pop_back();
if(!st.empty() && nums[i] > st.back() && st.back() > min_array[i]) return true;
else st.push_back(nums[i]);
}

}
return false;
}
};
```

## Problem solution in C.

```bool find132pattern(int *nums, int size)
{
int index = size, n3 = INT_MIN;

for (int i = size - 1; i > -1; i--) {
if (nums[i] < n3)
return true;

while (index < size && nums[i] > nums[index]) {
n3 = nums[index];
index++;
}

index--;
nums[index] = nums[i];
}

return false;
}
```