classSolution: deflengthOfLIS(self, nums: List[int]) -> int: ifnot nums: return0 dp = [1for _ in range(len(nums))] for i in range(len(nums)): for j in range(i): if nums[i] > nums[j]: dp[i] = max(dp[i], dp[j] + 1) return max(dp)
classSolution: deflengthOfLIS(self, nums: List[int]) -> int: ifnot nums: return0 res = [] for num in nums: ifnot res or num > res[-1]: res.append(num) else: l, r = 0, len(res) - 1 index = r while l <= r: mid = l + int((r -l) >> 1) if res[mid] >= num: index = mid r = mid - 1 else: l = mid + 1 res[index] = num return len(res)
2.1 复杂度分析
时间复杂度:数组nums 的长度为 n,我们依次用数组中的元素去更新 d 数组,而更新 d 数组时需要进行 O(logn) 的二分搜索,所以总时间复杂度为 O(nlogn)。