334. 递增的三元子序列
题目如下:
解题代码与解析:
注意点:递增的三元子序列可以是连续递增
,也可以是间接递增
public boolean increasingTriplet(int[] nums) {
// 给两个变量赋最大的值是为了后面方便能分别记录第一个数和第二个递增数;
int maxOne = Integer.MAX_VALUE; // 记录第一个数
int maxTwo = Integer.MAX_VALUE; // 记录第二个递增的数
/**
* 从开头开始进行遍历数组,maxOne是记录第一个数的,而maxTwo是记录第二个递增的数的,
* 那么只要有一个数比maxTwo大,那么就符合了; 注意不是连续递增的,可以是间续递增
* 注意maxTwo这个变量,当它有进行赋值的时候,证明遍历到赋值的那个位置的时候,加它已经
* 有两个递增的数了,只要后面再有比maxTwo大的,那么就可以直接return了
*
*/
for (int n : nums) {
// 记录第一个数,也是三个中最小的一个,所以它要在前面,所有比它小的都不能给maxTwo进行赋值
if(n<=maxOne) {
// maxOne记录三个递增中最小的那个,为了让maxTwo记录大于它的,所以这里使用<=
maxOne = n;
} else if (n<=maxTwo) {
// 进入这里时,maxOne已经记录了一个数,即递增序列中已经有了一个,然后maxTwo记录第二个
// 这里使用<=,因为它记录第二大的数,这使用<=就是为了让大于它的数进入下面的else从而结束方法
maxTwo = n;
} else {
// 能进来这里证明都比maxOne和maxTwo大,那么加上这次的就有三个了,所以直接return
// 注意前面的if利用maxOne和maxTwo过滤比它们两小的所以数,maxOne过滤比maxTwo小的,maxTwo过滤比最后一位小的
return true;
}
}
return false;
}
结果如下:
谢谢阅读,如有不对之处请指出!