Skip to content
On this page

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

原题链接:LeetCode 673. 最长递增子序列的个数

题目描述

给定一个未排序的整数数组 nums返回最长递增子序列的个数

注意 这个数列必须是 严格 递增的。

示例 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。

提示:

- `1 <= nums.length <= 2000`

-106 <= nums[i] <= 106

难度: Medium


题解代码

javascript
/**
 * @param {number[]} nums
 * @return {number}
 */
var findNumberOfLIS = function(nums) {
  const len = nums.length
  let maxLen = 1
  let res = 1
  const dp = Array(len).fill(1)
  for (let i = 1; i < len; i++) {
    for (let j = 0; j < i; j++) {
      if (nums[i] > nums[j]) {
        dp[i] = Math.max(dp[i], dp[j] + 1)
      }
    }
    // maxLen = Math.max(dp[i], maxLen)
    if (maxLen === dp[i]) {
      res += 1
    } else if (maxLen < dp[i]) {
      res = 1
      maxLen = dp[i]
    }
  }
  return res
};

技术文档集合