码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-09-01 14:50:26      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:length   max   mic   http   现在   math   序列   alt   its   

  • 分析
* 假设对于以 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;
    }

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

标签:length   max   mic   http   现在   math   序列   alt   its   

原文地址:https://www.cnblogs.com/lasclocker/p/11441998.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!