673. Number of Longest Increasing Subsequence 发表于 2022-01-28 12345678910111213141516171819202122232425262728293031323334353637class Solution { public int findNumberOfLIS(int[] nums) { // 定义 f[i] 为以 nums[i] 结尾的最长递增子序列的长度 int[] f = new int[nums.length]; Arrays.fill(f, 1); // 定义 g[i] 为以 nums[i] 结尾的最长递增子序列的个数 int[] g = new int[nums.length]; Arrays.fill(g, 1); int maxLength = 1; for (int i = 1; i < nums.length; i++) { for (int j = 0; j < i; j++) { if (nums[j] < nums[i]) { if (f[j] + 1 > f[i]) { // 能形成一个更长的递增子序列 f[i] = f[j] + 1; g[i] = g[j]; } else if (f[j] + 1 == f[i]) { g[i] += g[j]; } } } maxLength = Math.max(maxLength, f[i]); } // 注意长度最长的子序列可能以任意元素结尾 int count = 0; for (int i = 0; i < nums.length; i++) { if (f[i] == maxLength) { count += g[i]; } } return count; }} Reference673. Number of Longest Increasing Subsequence