All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g0601_0700.s0646_maximum_length_of_pair_chain.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g0601_0700.s0646_maximum_length_of_pair_chain;

// #Medium #Array #Dynamic_Programming #Sorting #Greedy
// #2022_03_21_Time_11_ms_(88.84%)_Space_54.4_MB_(18.92%)

import java.util.Arrays;

/**
 * 646 - Maximum Length of Pair Chain\.
 *
 * Medium
 *
 * You are given an array of `n` pairs `pairs` where pairs[i] = [lefti, righti] and lefti < righti.
 *
 * A pair `p2 = [c, d]` **follows** a pair `p1 = [a, b]` if `b < c`. A **chain** of pairs can be formed in this fashion.
 *
 * Return _the length longest chain which can be formed_.
 *
 * You do not need to use up all the given intervals. You can select pairs in any order.
 *
 * **Example 1:**
 *
 * **Input:** pairs = \[\[1,2],[2,3],[3,4]]
 *
 * **Output:** 2
 *
 * **Explanation:** The longest chain is [1,2] -> [3,4].
 *
 * **Example 2:**
 *
 * **Input:** pairs = \[\[1,2],[7,8],[4,5]]
 *
 * **Output:** 3
 *
 * **Explanation:** The longest chain is [1,2] -> [4,5] -> [7,8].
 *
 * **Constraints:**
 *
 * *   `n == pairs.length`
 * *   `1 <= n <= 1000`
 * *   -1000 <= lefti < righti <= 1000
**/
public class Solution {
    public int findLongestChain(int[][] pairs) {
        if (pairs.length == 1) {
            return 1;
        }
        Arrays.sort(pairs, (a, b) -> a[1] - b[1]);
        int min = pairs[0][1];
        int max = 1;
        for (int i = 1; i < pairs.length; i++) {
            if (pairs[i][0] > min) {
                max++;
                min = pairs[i][1];
            }
        }
        return max;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy