描述
给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。
如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。
分析
使用普通的最长递增子序列的动态规划求法会超时。
题目理解为用两个变量one,two分别表示为长度为1的子序列的末端结点最小值,和长度为2的子序列的末端结点最小值。
若存在一个数比two还要大,说明递增子序列的长度能够达到3.
class Solution {
public boolean increasingTriplet(int[] nums) {
// int[] dp = new int[nums.length];
// for(int i = 0; i < nums.length; i++){
// dp[i] = 1;
// for(int j = 0; j < i; j++){
// if(nums[i] > nums[j]){
// dp[i] = Math.max(dp[j] + 1, dp[i]);
// }
// if(dp[i] == 3){
// return true;
// }
// }
// }
// return false;
int one = Integer.MAX_VALUE;
int two = Integer.MAX_VALUE;
for(int num : nums){
if(num <= one) {
one = num;
} else if (num <= two){
two = num;
} else {
return true;
}
}
return false;
}
}