# Time: O(n)
# Space: O(n)
# 456. 132 Pattern
'''
Packing information into names
'''
# version 1.0
class Solution(object):
def find132pattern(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
ak = float("-inf")
st = []
for i in reversed(xrange(len(nums))):
if nums[i] < ak:
return True
else:
while st and nums[i] > st[-1]:
ak = st.pop()
st.append(nums[i])
return False
# version 1.1
class Solution(object):
def find132pattern(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
real_2 = float("-inf")
potenial_2 = []
for i in reversed(xrange(len(nums))):
if nums[i] < real_2:
return True
else:
while potenial_2 and nums[i] > potenial_2[-1]:
real_2 = potenial_2.pop()
potenial_2.append(nums[i])
return False
# version 1.2
class Solution(object):
def find132pattern(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
cur_2 = float("-inf")
pool_2 = []
for i in reversed(xrange(len(nums))):
if nums[i] < cur_2:
return True
else:
while pool_2 and nums[i] > pool_2[-1]:
cur_2 = pool_2.pop()
pool_2.append(nums[i])
return False
# version 1.3
class Solution(object):
def find132pattern(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
max_2 = float("-inf")
pool_2 = []
for i in reversed(xrange(len(nums))):
if nums[i] < max_2:
return True
else:
while pool_2 and nums[i] > pool_2[-1]:
max_2 = pool_2.pop()
pool_2.append(nums[i])
return False
# version 1.4