// Longest Increasing Subsequence — MEDIUM
// Category: dynamic-programming
Given an integer array `nums`, return the length of the longest **strictly increasing** subsequence.
A subsequence is a sequence derived from the array by deleting some (or no) elements without changing the order of remaining elements.
Hint: O(n log n) solution — maintain a `tails` array. For each number, binary search for the first element in `tails` that is ≥ the number and replace it, or append if larger than all.
Example: nums = [10, 9, 2, 5, 3, 7, 101, 18]
Output: 4