文章目录
题目描述
给你一个整数数组 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 的三元组都满足题意示例 2:
输入:nums = [5,4,3,2,1]
输出:false
解释:不存在满足题意的三元组示例 3:
输入:nums = [2,1,5,0,4,6]
输出:true
解释:三元组 (3, 4, 5) 满足题意,因为 nums[3] == 0 < nums[4] == 4 < nums[5] == 6
思路分析
注意题目中所说的是递增子序列,并不需要连续。
我们要找到是否存在递增的三个数。
最优方案要使第一个数first尽可能的小。
第二个数second比first大且尽可能地小。
此时只需要再找到一个数大于second即找到答案。
冒出一个思路,很可能是贪心,可以维护两个指针,第一个指针指向first,第二个指针指向second,使得在条件first<second下 两个数尽可能的小。如是有下面的思路:
- 设数组的第一个数为 first
- 设第二个数second为无穷大
- 此时遍历数组,如果找到一个数大于second,说明找到了第三个数,则直接返回True。
- 继续往后,如果找到一个数大于first但小于second,则更新second。
- 继续往后,说明这个数既不大于second,也不大于first。则更新first。
完整代码