334. 递增的三元子序列
题目
给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。
如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。
示例 1:
1 | 输入:nums = [1,2,3,4,5] |
示例 2:
1 | 输入:nums = [5,4,3,2,1] |
示例 3:
1 | 输入:nums = [2,1,5,0,4,6] |
提示:
- $1 <= nums.length <= 10^5$
- $-2^{31} <= nums[i] <= 2^{31} - 1$
主要思想
为什么可以这么贪心。
最开始找到的small和mid是有序的,如果此时下一个数大于mid,说明直接找到,如果大于small,直接刷新small而保持mid不变,此时虽然small和mid已经不再是顺序关系,但是隐含的是存在一个顺序关系(小于mid的前small在mid前面)。
一旦我们更新了mid,则small和mid恢复顺序关系
一旦我们不更新mid,说明mid前面有小于他的前small
那么一旦需要我们发现了比当前mid大的数,显然三个数就找到了。
代码实现
1 | class Solution { |
原文链接: https://zijian.wang/2021/09/17/334. 递增的三元子序列(贪心)/
版权声明: 转载请注明出处.