Dynamic Programming: Longest Increasing Subsequence (LIS)

Problem

Given an integer array, return the length of the longest strictly increasing subsequence.

Tabulation (O(n^2))

def lengthOfLIS(nums):
    n = len(nums)
    dp = [1] * n
    for i in range(n):
        for j in range(i):
            if nums[j] < nums[i]:
                dp[i] = max(dp[i], dp[j] + 1)
    return max(dp)