给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。
def increasingTriplet1(nums):
"""
遍历法,for循环和while循环,for循环对边界条件考虑较少。
"""
n = len(nums)
if n < 3:
return False
for i in range(n):
for j in range(i, n):
if nums[j] > nums[i]:
for k in range(j, n):
if nums[k] > nums[j]:
return True
return False
def increasingTriplet2(nums):
"""
双指针法,两个指针分别记录递增的三元组中的第一个元素和第二个元素。判断新的元素是否大于第二个元素。
two附带隐含信息——这之前有个数比two小
"""
one = float(‘inf‘)
two = float(‘inf‘)
for num in nums:
if num <= one:
one = num # 更新第一个元素,扩大了后面第二个元素取值的范围
elif num > one and num <= two:
two = num # 更新第二个元素,扩大了后面第三个元素取值的范围
else:
return True
return False
原文:https://www.cnblogs.com/youguang369/p/14471393.html