记录扫描过的最小值与第二小的值。初始值都为Integer.MAX_VALUE。
- 如果当前数字比最小值还小,我们就更新最小值。
- 如果当前数字大于最小值并且小于第二小的值,我们就更新第二小的值。
- 如果当前数字大于第二小的值,说明找到了递增的三元子序列,直接返回true。
关键理解:最小值先于第二小值赋值,如果第二小的值被赋值了,那么最小的值肯定存在!!!
class Solution:
def increasingTriplet(self, nums: List[int]) -> bool:
L = len(nums)
if L < 3:
return False
min1 = mid1 = min2 = nums[0]
for i in range(1,L):
if nums[i] <= min1:
if mid1> min1:
if nums[i] < min2:
min2 = nums[i]
elif nums[i] > min2:
min1 = min2
mid1= nums[i]
else:
min1 = mid1 = nums[i]
else:
if mid1 > min1 and nums[i] > mid1:
return True
mid1 = nums[i]
if min2 < min1:
min1 = min2
return False