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)相关推荐

  1. LeetCode 673. 最长递增子序列的个数

    LeetCode 673. 最长递增子序列的个数 文章目录 LeetCode 673. 最长递增子序列的个数 题目描述 一.解题关键词 二.解题报告 1.思路分析 2.时间复杂度 3.代码示例 2.知 ...

  2. [Leetcode]673. 最长递增子序列的个数

    给定一个未排序的整数数组 nums , 返回最长递增子序列的个数 . 注意 这个数列必须是 严格 递增的. 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列,分别是 ...

  3. leetcode - 673. 最长递增子序列的个数

    给定一个未排序的整数数组,找到最长递增子序列的个数. 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7] ...

  4. 112. Leetcode 673. 最长递增子序列的个数 (动态规划-子序列问题)

    步骤一.确定状态: 确定dp数组及下标含义 dp[i]表示以nums[i]结尾的数组最长递增子序列的长度, count数组, count[i]记 录以nums[i]结尾的数组,最长递增子序列的个数. ...

  5. 673. 最长递增子序列的个数

    673. 最长递增子序列的个数 给定一个未排序的整数数组,找到最长递增子序列的个数. 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列,分别是 [1, 3, 4, ...

  6. 【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 返 ...

  7. [Swift]LeetCode673. 最长递增子序列的个数 | Number of Longest Increasing Subsequence

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  8. 最长递增子序列的个数Python解法

    给定一个未排序的整数数组,找到最长递增子序列的个数. 列: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]. # ...

  9. 【Leetcode】最长递增子序列问题及应用

    文章目录 最长递增子序列问题及应用 300. 最长递增子序列 面试题 17.08. 马戏团人塔 354. 俄罗斯套娃信封问题 面试题 08.13. 堆箱子 1691. 堆叠长方体的最大高度 406. ...

最新文章

  1. linux环境变量 LD_LIBRARY_PATH 使用
  2. pl/sql developer执行光标所在行
  3. 了解和使用类库(47)
  4. 信息安全系统设计基础第八周学习总结
  5. 萌宝出街,熊孩子逆袭小小“时髦精”
  6. 纯jsp实现评论功能_自己实现的java手写tomcat
  7. java姑娘_初识java这个小姑娘(二)
  8. java定义一个方法,返回一个整数数组的元素最小值
  9. SQL Server存储过程中使用表值作为输入参数示例
  10. C#操作XML方法详解
  11. 制药工程专业计算机二级,全国制药工程本科专业认证标准2016年12月修订.pdf
  12. 安装列表阿里云UBUNTU 12下安装LAMP
  13. 14.http 304优化,了解客户端缓存
  14. 怎么把excel文件转成dta_dta数据格式在excel表格中打开-怎么才能把excel文件格式转化为dat格式?...
  15. php excel自适应列宽,PHPExcel自动调整列宽
  16. 高通8953调试I2S小记
  17. Python语法——列表、元组、集合、字典
  18. 天津大学计算机系专业,请问天大计算机专业的研究生怎么样啊?
  19. TLS1.3抓包分析(3)——EncryptedExtentions等
  20. 抖音怎么实现落地页跳转微信加好友?

热门文章

  1. Django查询 – id vs pk
  2. Linux中的crontab详解
  3. UIBezierPath
  4. php 加密保存mysql_PHP及MYSQL中字符串加密函数
  5. vue.js框架搭建
  6. Maven整合Spring3.0+Mybatis3.2+Struts2.3+查找坐标+jar包依赖(五)
  7. Entityframework批量删除
  8. Matlab编程学习笔记【待续】
  9. g++编译时的常用选项说明
  10. 现在的年轻人,正在努力的改变着一些东西