力扣连接:300. 最长递增子序列 - 力扣(LeetCode)
class Solution {
public int lengthOfLIS(int[] nums) {
int ans = 0;
int len = nums.length;
// tail[i]表示长度为i+1的子序列结尾的数字
// 注意:最后tail数组中存的序列虽然是严格递增的,但是不是最后的结果子序列
int[] tail = new int[len];
for (int i = 0; i < len; i++) {
// 找到第一个大于nums[i]的数
int l = 0, r = ans;
while (l < r) {
int m = l + (r - l) / 2;
if (tail[m] < nums[i]) {
l = m + 1;
} else {
r = m;
}
}
tail[r] = nums[i];
if (ans == r)
ans++;
}
return ans;
}
}