这一题,也没有很繁杂的思路。只需要遍历一遍,并在遍历的过程里记住两个数字就行了,一个是当前最小的数字,第二个数字,如果我们称为min2,这个min2的更新条件是如果当前遍历到的数字大于最小值但小于当前的min2,便将min2更新为当前的数字。这种做法得到的min2并不是当前第二小的数字。其实和LIS的最优解做法的dp数组差不多,主要就是为了记录当前最优解所需要的数字。一旦遍历到比min2更大的数字,就返回true。如果一直没遇到比min2更大的数字,就表示无解。
根据上述算法,可以得到代码如下:
public boolean increasingTriplet(int[] nums) {
int min = Integer.MAX_VALUE, secMin = Integer.MAX_VALUE;
for (int num : nums) {
if (num <= min) {
min = num;
} else if (num <= secMin) {
secMin = num;
} else {
return true;
}
}
return false;
}