最长递增子序列的个数

最长递增子序列的个数

public class Solution {  
    public int findNumberOfLIS(int[] nums) {
        int n = nums.length;
        int[] dp = new int[n];
        int[] count = new int[n];

        Arrays.fill(dp, 1);
        Arrays.fill(count, 1);

        int maxLength = 1;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < i; j++) {
                //没递增,直接下一个
                if (nums[i] <= nums[j]) {
                    continue;
                }
                //是递增
                if (dp[i] < dp[j] + 1) {
                    dp[i] = dp[j] + 1;
                    //记录数量
                    count[i] = count[j];
                } else if (dp[i] == dp[j] + 1) {
                    //两个相同长度的结果,累加
                    count[i] += count[j];
                }
            } 
            //最长序列数
            maxLength = Math.max(maxLength, dp[i]);
        }
        int result = 0;
        for (int i = 0; i < n; i++) {
            if (dp[i] == maxLength) {
                result += count[i];
            }
        }
        return result;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容