背景:
给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。
如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。
示例 1:
输入:nums = [1,2,3,4,5]
输出:true
解释:任何 i < j < k 的三元组都满足题意
来源:力扣(LeetCode)
解题思想:
mid指针遍历数组
同时记录mid左边的元素比mid小的
左右两次遍历
class Solution:
def increasingTriplet(self, nums: List[int]) -> bool:
n = len(nums)
if n < 3:
return False
leftMin = [0] * n
leftMin[0] = nums[0]
for i in range(1, n):
leftMin[i] = min(leftMin[i - 1], nums[i])
rightMax = [0] * n
rightMax[n - 1] = nums[n - 1]
for i in range(n - 2, -1, -1):
rightMax[i] = max(rightMax[i + 1], nums[i])
for i in range(1, n - 1):
if leftMin[i - 1] < nums[i] < rightMax[i + 1]:
return True
return False