一、题目信息
本题和LeetCode_491相同,这里我以牛客网的形式写题。
二、解题思路
题目要求的只需要找到长度为三的子序列,还不要求是连续的。创建两个引用,first,second,分别表示第一大和第二大的数字,如果遍历的时候数组中还有比他们两个数还大的数字,那长度为3的子序列不就有了吗?如果遍历完了还么有,就说明是真的没有了,返回false。
还有其他两种情况
1、遍历数组的时候遇到的数(这里称为P)first比p大,既然连子序列最小的数都比它大,那么就说明这时候的first不是最小的,更新first,让first=p。
2、P比fist大但是没有second大,大不是很大,但是也不小,这时我们更新
second,第二大的数就有了。
3、图和例子在下方。
假如下面有以下数组,8,25,13,11,30,数组名为arr。初始化fist为arr[0],second为Integer的最大值。如果还能有数字比second大,那直接返回好了。就是图的第三种情况。我们让i从1开始走一步过程。
1、i=1,arr[i]>first但是小于second更新second,second=arr[i],为25.
2、i=2,arr[i]>first但是小于second,更新second,second=13.
3、i=3,arr[i]>first但是小于second,更新second,second=11.
4、i=4,arr[i]>first,还大于second,找到了!