思路:这个题中的递增三元组的数组下标不是必须要连续的,但必须是递增的,定义两个指针first和second,分别指向数组中的最小值和次小值,初始化为Integer.MAX_VALIUE,遍历数组,首先和first比较,当遍历的值小于等于first时,将其赋给first,继续遍历,当遍历的值大于first小于second时,将其赋给second,继续遍历。只要后边遍历的值大于second,即存在递增三元组,返回true。
注意:
1.因为second的初始值是Integer.MAX_VALUE,所以当遍历的值大于second时,second一定在之前被赋值了,则first也被赋值了。
2.当first被赋值后再次改变时,second可能后续会变,也可能不会再改变。second变的话即其数组下标还是大于first数组下标的,此时只要在second后找到一个大于second的值即返回true。若second不再改变,这说明此时的first的数组下标是大于second的数组下标的,即不满足题目要求的递增顺序。但是first改变之前的那个值,即上一个first值,其值还是小于当前second的,若在second后找到一个大于second的值,同样满足递增三元组,即返回true。
3.比较的时候用小于等于,不是小于,题目要求是递增,不是非递减三元组。
代码:
class Solution {
public boolean increasingTriplet(int[] nums) {
if (nums.length < 3) {
return false;
}
int first = Integer.MAX_VALUE;
int second = Integer.MAX_VALUE;
for (int i = 0; i < nums.length; i++) {
if (nums[i] <= first) {
first = nums[i];
}
else if (nums[i] <= second) {
second = nums[i];
}
else {
return true;
}
}
return false;
}
}