30.动态规划之子序列问题-最长递增子序列长度.py

# 元素不连续!| LeetCode:300.
# 给你一个整数数组nums ,找到其中最长严格递增子序列的长度。
#
# 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。
# 例如,[3, 6, 2, 7]是数组[0, 3, 1, 6, 2, 2, 7]的子序列。
#
#
# 示例1:
# 输入:nums = [10, 9, 2, 5, 3, 7, 101, 18]
# 输出:4
# 解释:最长递增子序列是[2, 3, 7, 101],因此长度为4 。
#
# 示例2:
# 输入:nums = [0, 1, 0, 3, 2, 3]
# 输出:4
#
# 示例3:
# 输入:nums = [7, 7, 7, 7, 7, 7, 7]
# 输出:1

# 1.dp[i] 从j到i最长递增子序列
# 2.dp[i]= dp[j]+1
# 3.初始化:分别对dp[0][j] dp[i][0]进行初始化
# 4.确定遍历顺序
# 5.打印dp

nums = [1, 0, 0, 1, 1, 2, 3, 3]
nums0 = [5,6,7,1,2]
nums1 = [10,9,2,5,3,7,101]
nums2 = [5,6,7,1,2,8,3,9]

def get_num(nums):
    dp = [1]*len(nums)
    dp[0] = 1
    for i in range(1, len(nums)):
        for j in range(i):
            if nums[i] > nums[j]:
                dp[i] = max(dp[j] + 1, dp[i])
    print(dp)
    return max(dp)
print(get_num(nums1))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值