public int lengthOfLIS(int[] nums) {
if (nums == null || nums.length == 0) return 0;
int[] dp = new int[nums.length];
dp[0] = 1;
if (nums.length == 1) return 1;
int maxAns = 0;
for (int i = 1; i < dp.length; i++) {
int maxVal = 0;
for (int j = 0; j < i; j++) {
if (nums[i] > nums[j])
maxVal = Math.max(maxVal, dp[j]);
}
dp[i] = maxVal + 1;
maxAns = Math.max(maxAns, dp[i]);
}
return maxAns;
}
public int lengthOfLIS(int[] nums) {
int n = nums.length;
int[] tails = new int[n];
int len = 0;
for (int x : nums) {
int lo = 0, hi = len;
while (lo < hi) {
int mid = lo + (hi - lo) / 2;
if (x > tails[mid]) lo = mid + 1;
else hi = mid;
}
tails[lo] = x;
if (lo == len) len++;
}
return len;
}
转载请注明原文地址:https://ipadbbs.8miu.com/read-31297.html