Longest Increasing Subsequence
MediumArrayBinary SearchDynamic Programming
Solution
export function lengthOfLIS(nums: number[]): number {
function lowerbound(arr: number[], target: number): number {
let [left, right] = [0, arr.length];
while (left < right) {
const mid = Math.floor((left + right) / 2);
if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid;
}
}
return left;
}
const arr: number[] = [];
for (const num of nums) {
if (arr.length === 0 || arr[arr.length - 1] < num) {
arr.push(num);
} else {
arr[lowerbound(arr, num)] = num;
}
}
return arr.length;
}