题目:给定一个无序数组[1, 5, 2, 4, 3],找出最长的递增子序列,返回其长度。
思路:L(i)表示 i 之后的数字中存在的最长子序列的长度
L(1)=max{L(2), L(3), L(4), L(5)}
L(2)=max{L(3), L(4), L(5)}
L(3)=max{L(4), L(5)}
L(4)=max{L(5)}
L(5)=0
程序:
def length_of_LIS(nums):
n=len(nums) # 5
L=[1] * n # initial value: $[1,1,1,1,1]$
for i in reversed(range(n)): # i -> 4,3,2,1,0
for j in range(i+1, n):
if nums [j]> nums[i]: # is increasing seq
L[i] = max (L[i], L[j]+1)
return max(L)
if __name__ == '__main__':
nums = [1,5,2,4,3]
length = length_of_LIS(nums)
print(length)