leetcode 最长数对链

思路: 利用动态规划,用dp[i] 存储第i个位置最能达到的最长链个数,

然后利用双重循环,每到一个位置,从后往前遍历寻找

但是,要注意的一点,在进行动态规划时一定要先将二维数组的第一个值按照从小到大排序才行

class Solution {
    public int findLongestChain(int[][] pairs) {
        int n = pairs.length;
        if(n == 1) return 1;
        int dp[] = new int[n + 1];
        Arrays.fill(dp, 1);
        Arrays.sort(pairs, (a, b) -> (a[0] - b[0]));//排序,后面的参数是规定比较策略
        int ans = 0;
        for(int i = 2; i < n + 1; i ++)
        {
            int max = 0;
            for(int j = i ; j > 0; j --)
            {
                if(pairs[i-1][0] > pairs[j - 1][1])
                {
                    max = Math.max(max, dp[j]);
                }
            }
            dp[i] += max;
            ans = Math.max(ans, dp[i]);
        }
        return ans;
        
    }
}

 

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页