LeetCode 673. 最长递增子序列的个数(DP)
1. 题目
给定一个未排序的整数数组,找到最长递增子序列的个数。
示例 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。
注意: 给定的数组长度不超过 2000 并且结果一定是32位有符号整数。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-longest-increasing-subsequence
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
类似题目:动态规划应用–最长递增子序列 LeetCode 300
- 本题不仅要求最长子序列,还要求个数
- 使用两个dp数组,一个记录以 i 结束的最大长度dp[i]
- 一个记录以 i 结束的最长子序列的个数
class Solution { // C++
public:int findNumberOfLIS(vector<int>& nums) {int i, j, n = nums.size();int maxlen = 1, sum = 0;vector<int> dp(n, 1);vector<int> count(n, 1);for(i = 1; i < n; ++i){for(j = i-1; j >= 0; --j){if(nums[i] > nums[j]){if(dp[j]+1 > dp[i]){dp[i] = dp[j]+1;count[i] = count[j];//更新为count[j]}else if(dp[j]+1 == dp[i])count[i] += count[j];//与count[j]相加}}maxlen = max(maxlen, dp[i]);}for(i = 0; i < n; ++i)if(dp[i]==maxlen)sum += count[i];return sum;}
};
84 ms 12.7 MB
class Solution:def findNumberOfLIS(self, nums: List[int]) -> int:n = len(nums)maxlen = 1dp = [1]*ncount = [1]*nfor i in range(1,n):for j in range(i):if nums[i] > nums[j]:if dp[j]+1 > dp[i]:dp[i] = dp[j]+1count[i] = count[j]elif dp[j]+1 == dp[i]:count[i] += count[j]maxlen = max(maxlen, dp[i])ans = 0for i in range(n):if dp[i]==maxlen:ans += count[i]return ans
812 ms 13.8 MB
题解区还有nlogn
解法,线段树,树状数组等
LeetCode 673. 最长递增子序列的个数(DP)相关推荐
- LeetCode 673. 最长递增子序列的个数
LeetCode 673. 最长递增子序列的个数 文章目录 LeetCode 673. 最长递增子序列的个数 题目描述 一.解题关键词 二.解题报告 1.思路分析 2.时间复杂度 3.代码示例 2.知 ...
- [Leetcode]673. 最长递增子序列的个数
给定一个未排序的整数数组 nums , 返回最长递增子序列的个数 . 注意 这个数列必须是 严格 递增的. 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列,分别是 ...
- leetcode - 673. 最长递增子序列的个数
给定一个未排序的整数数组,找到最长递增子序列的个数. 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7] ...
- 112. Leetcode 673. 最长递增子序列的个数 (动态规划-子序列问题)
步骤一.确定状态: 确定dp数组及下标含义 dp[i]表示以nums[i]结尾的数组最长递增子序列的长度, count数组, count[i]记 录以nums[i]结尾的数组,最长递增子序列的个数. ...
- 673. 最长递增子序列的个数
673. 最长递增子序列的个数 给定一个未排序的整数数组,找到最长递增子序列的个数. 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列,分别是 [1, 3, 4, ...
- 【LeetCode 动态规划专项】最长递增子序列的个数(673)
文章目录 1. 题目 1.1 示例 1.2 说明 1.3 提示 1.4 进阶 2. 解法一(动态规划) 2.1 分析 2.1.1 定义状态 2.1.2 初始化状态 2.1.3 状态转移 2.1.4 返 ...
- [Swift]LeetCode673. 最长递增子序列的个数 | Number of Longest Increasing Subsequence
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
- 最长递增子序列的个数Python解法
给定一个未排序的整数数组,找到最长递增子序列的个数. 列: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]. # ...
- 【Leetcode】最长递增子序列问题及应用
文章目录 最长递增子序列问题及应用 300. 最长递增子序列 面试题 17.08. 马戏团人塔 354. 俄罗斯套娃信封问题 面试题 08.13. 堆箱子 1691. 堆叠长方体的最大高度 406. ...
最新文章
- linux环境变量 LD_LIBRARY_PATH 使用
- pl/sql developer执行光标所在行
- 了解和使用类库(47)
- 信息安全系统设计基础第八周学习总结
- 萌宝出街,熊孩子逆袭小小“时髦精”
- 纯jsp实现评论功能_自己实现的java手写tomcat
- java姑娘_初识java这个小姑娘(二)
- java定义一个方法,返回一个整数数组的元素最小值
- SQL Server存储过程中使用表值作为输入参数示例
- C#操作XML方法详解
- 制药工程专业计算机二级,全国制药工程本科专业认证标准2016年12月修订.pdf
- 安装列表阿里云UBUNTU 12下安装LAMP
- 14.http 304优化,了解客户端缓存
- 怎么把excel文件转成dta_dta数据格式在excel表格中打开-怎么才能把excel文件格式转化为dat格式?...
- php excel自适应列宽,PHPExcel自动调整列宽
- 高通8953调试I2S小记
- Python语法——列表、元组、集合、字典
- 天津大学计算机系专业,请问天大计算机专业的研究生怎么样啊?
- TLS1.3抓包分析(3)——EncryptedExtentions等
- 抖音怎么实现落地页跳转微信加好友?