2026/3/24 15:33:43
网站建设
项目流程
网站模板文件怎么下载,wordpress 关闭本地化,wordpress登录页,wordpress 1g1核1m本文参考代码随想录 给定一个未排序的整数数组#xff0c;找到最长递增子序列的个数。
示例 1:
输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列#xff0c;分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。 示例 2:
输入: [2,2,2,2,2] 输出: 5 解释: 最长递增子序列的长度是…本文参考代码随想录给定一个未排序的整数数组找到最长递增子序列的个数。示例 1:输入: [1,3,5,4,7]输出: 2解释: 有两个最长递增子序列分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。示例 2:输入: [2,2,2,2,2]输出: 5解释: 最长递增子序列的长度是1并且存在5个子序列的长度为1因此输出5思路动态规划确定dp数组dp table以及下标的含义dp[i]i之前包括i最长递增子序列的长度为dp[i]count[i]以nums[i]为结尾的字符串最长递增子序列的个数为count[i]确定递推公式在nums[i] nums[j]前提下如果在[0, i-1]的范围内找到了j使得dp[j] 1 dp[i]说明找到了一个更长的递增子序列。那么以j为结尾的子串的最长递增子序列的个数就是最新的以i为结尾的子串的最长递增子序列的个数即count[i] count[j]。在nums[i] nums[j]前提下如果在[0, i-1]的范围内找到了j使得dp[j] 1 dp[i]说明找到了两个相同长度的递增子序列。那么以i为结尾的子串的最长递增子序列的个数 就应该加上以j为结尾的子串的最长递增子序列的个数即count[i] count[j];dp数组如何初始化count[i]记录了以nums[i]为结尾的字符串最长递增子序列的个数。那么最少也就是1个所以count[i]初始为1。dp[i]记录了i之前包括i最长递增序列的长度。最小的长度也是1所以dp[i]初始为1。确定遍历顺序dp[i] 是由0到i-1各个位置的最长升序子序列 推导而来那么遍历i一定是从前向后遍历。j其实就是0到i-1遍历i的循环里外层遍历j则在内层classSolution:deffindNumberOfLIS(self,nums:List[int])-int:sizelen(nums)ifsize1:returnsize dp[1]*size count[1]*size max_length1foriinrange(size):forjinrange(i):ifnums[i]nums[j]:ifdp[j]1dp[i]:dp[i]dp[j]1count[i]count[j]elifdp[j]1dp[i]:count[i]count[j]ifdp[i]max_length:max_lengthdp[i]max_count0foriinrange(size):ifmax_lengthdp[i]:max_countcount[i]returnmax_count