📅  最后修改于: 2023-12-03 15:26:11.376000             🧑  作者: Mango
本题需要找出数组中最长的强力数子序列的长度。强力数是指一个数的每一位上的数字都不小于前一位上的数字。
可以使用动态规划的方法来解决此问题,具体步骤如下:
定义状态:使用一个一维数组 dp
存储当前位置为止的最长强力数子序列的长度。
初始化状态:对于任意一个位置,其对应的最长强力数子序列的长度至少为1。
状态转移:从前向后遍历数组,对于任意一个位置 i
,需要在 0~i-1
中查找所有比 nums[i]
小的数中,最长的强力数子序列长度的最大值。如果找不到比 nums[i]
小的数,则 dp[i]
的值为1。具体公式如下:
dp[i] = max(dp[j] + 1), 0 <= j < i, nums[j] <= nums[i],并且 nums[j] 中的每一位都不小于 nums[i] 中对应的位
最终结果:最终结果为 dp
数组中的最大值。
def longest_increasing_subsequence(nums):
n = len(nums)
dp = [1] * n
for i in range(1, n):
for j in range(i):
if nums[j] <= nums[i] and all(int(x) >= int(y) for x, y in zip(str(nums[j]), str(nums[i]))):
dp[i] = max(dp[i], dp[j] + 1)
return max(dp)