动态规划-646-Maximum Length of Pair Chain

本文介绍了一种算法,用于从给定的一系列数对中找出最长的对链。通过对数对按结束值排序,并使用贪心策略,该算法能有效地解决这一问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description:
You are given n pairs of numbers. In every pair, the first number is always smaller than the second number.

Now, we define a pair (c, d) can follow another pair (a, b) if and only if b < c. Chain of pairs can be formed in this fashion.

Given a set of pairs, find the length longest chain which can be formed. You needn’t use up all the given pairs. You can select pairs in any order.

Example 1:
Input: [[1,2], [2,3], [3,4]]
Output: 2
Explanation: The longest chain is [1,2] -> [3,4]

Note:
1.The number of given pairs will be in the range [1, 1000].

问题描述:
你有n对数,每对数的第一个数总比第二个数要小。
现在定义,对于(c,d)和(a,b),当c > b时,(c,d)可以’follow’(a,b)。对链可以以这种方式形成。
现在给定一组对,找出最长的对链。注意可以以任意次序选择对

解法:

/*
令pair = (start, end)
首先将pairs按照end排序
然后在遍历pairs的过程中维护一个end,它为遍历过的pair中最大的end
*/
class Solution {
    public int findLongestChain(int[][] pairs) {
        Arrays.sort(pairs, new Comparator<int[]>() {
            @Override
            public int compare(int[] arg0, int[] arg1) {
                return arg0[1] - arg1[1];
            }});

        int sum = 0, end = Integer.MIN_VALUE;
        for(int i = 0;i < pairs.length;i++) {
            int[] pair = pairs[i];
            if(pair[0] > end) {
                sum++;
                end = pair[1];
            }
        }

        return sum;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值