给定一个整数序列: a 1 , a 2 , . . . , a n a_1, a_2, ..., a_n a1,a2,...,an,一个132模式的子序列 ai, aj, ak 被定义为:当 i < j < k 时, a i < a k < a j a_i < a_k < a_j ai<ak<aj。设计一个算法,当给定有 n 个数字的序列时,验证这个序列中是否含有132模式的子序列。
用python3始终超时,但是同样的算法,采用Java,C++就可以不超时
夭折在92例子中,始终过不去
class Solution:
def find132pattern(self, nums: List[int]) -> bool:
n= len(nums)
if(n < 3):
return False
i=0
j=0
k=0
while(i<n):
while(i < n-2 and nums[i]>=nums[i+1]):
i += 1
j = i+1
while(j < n-1 and nums[j] <= nums[j+1]):
j += 1
k = j+1
while(k<n):
if(nums[k]<nums[j] and nums[k]>nums[i]):
return True
else:
k += 1
i=j+1
return False
class Solution(object):
def find132pattern(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
n = len(nums)
if(n < 3):
return False
if(len(set(nums)) < 3):
return False
left = float('inf')
for i in range(1,n-1):
left = min(left, nums[i-1])
if(left < nums[i]):
for j in range(i+1,n):
if(left < nums[j] and nums[j] < nums[i]):
return True
return False