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


    • dp 解法 时间复杂度 O(N^2)
    * 假设对于以 nums[i] 结尾的序列,我们知道最长序列的长度 length[i],以及具有该长度的序列的 count[i]。
    * 对于每一个 j<i 和一个 nums[i]>nums[j],我们可以将一个 nums[i] 附加到以 nums[j] 结尾的最长子序列上。
    * 如果这些序列的长度 length[j]+1 > length[i],那么我们就知道现在有count[j]个这种长度(length[j]+1)的序列。如果这些序列的长度length[j]+1 == length[i],那么我们就知道现在有 count[j] 个额外的序列(即 count[i]+=count[j]。
    
    * The result is the sum of each count[i] while its corresponding length[i] is the maximum length.
    

    public int findNumberOfLIS(int[] nums) {
            int[] length = new int[nums.length];
            int[] count = new int[nums.length];
            for (int i = 0; i < nums.length; i++) {
                length[i] = 1;
                count[i] = 1;
                for (int j = 0; j < i; j++) {
                    if (nums[i] > nums[j]) {
                        if (length[j] + 1 > length[i]) {
                            length[i] = length[j] + 1;
                            count[i] = count[j];
                        } else if (length[j] + 1 == length[i]) {
                            count[i] += count[j];
                        }
                    }
                }
            }
    
            int maxLen = 0;
            for (int len : length) {
                maxLen = Math.max(maxLen, len);
            }
            int result = 0;
            for (int i = 0; i < length.length; i++) {
                if (length[i] == maxLen) {
                    result += count[i];
                }
            }
            return result;
        }
    
  • 相关阅读:
    PHP编程资源
    JSP+Java编程资源
    Word、Excel办公书的资源下载
    听你说
    一些好看的渐变色(配色)网站推荐
    js判断数组中是否包含某个元素
    你才是你故事的作者
    vue-color 颜色选择器插件用法介绍
    vue-cli3 导入.md文件,vue中markdown文件的解析与渲染
    新版 animate.css 在vue中的正确使用
  • 原文地址:https://www.cnblogs.com/lasclocker/p/11441998.html
Copyright © 2020-2023  润新知