Longest Increasing Subsequence
December 19, 2023
Problem #
Find the longest increasing subsequence in a given sequence of numbers.
Solution #
def longest_increasing_subsequence(nums):
if not nums:
return 0
dp = [1] * len(nums)
for i in range(1, len(nums)):
for j in range(i):
if nums[i] > nums[j]:
dp[i] = max(dp[i], dp[j] + 1)
return max(dp)
# Test the function with an example
print(longest_increasing_subsequence([10, 22, 9, 33, 21, 50, 41, 60, 80]))
In this code, the longest_increasing_subsequence function takes a list of integers as input and returns the length of the longest increasing subsequence in that list. The algorithm works by first
initializing a list dp where dp[i] represents the length of the longest increasing subsequence ending at index i. Then, for each element nums[i] in the list, it checks if there is any previous
element nums[j] that is smaller than nums[i]. If so, it updates dp[i] to be the maximum of its current value and dp[j] + 1, which represents the length of the longest increasing subsequence ending at
index j plus one (for the new element nums[i]). Finally, it returns the maximum value in dp, which represents the length of the longest increasing subsequence in the input list.
When run with the test case [10, 22, 9, 33, 21, 50, 41, 60, 80], this function will return 5, which corresponds to the longest increasing subsequence [10, 22, 33, 50, 60].