[LeetCode] 646. Maximum Length of Pair Chain

来源:互联网 发布:武义网络电视 编辑:程序博客网 时间:2024/05/18 21:39

[LeetCode] 646. Maximum Length of Pair Chain

题目描述

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:
The number of given pairs will be in the range [1, 1000].

分析

要获得尽量多的对,那么在每次取对时要取尽量小的一对,然后继续选择下去。
开始对于数组的排序是想先比较开始的时间,开始时间小的放在前面,然后相同的情况下结束时间小的放在前面,但这样出现了错误。
这个问题的状态方程应该为dp[i] = Math.max(dp[i], pairs[i][0] > pairs[j][1]? dp[j] + 1 : dp[j]) (j < i),因此比较开始的时间是没用的。

class Solution {public:  int findLongestChain(vector<vector<int>>& pairs) {    sort(pairs.begin(), pairs.end(), cmp);    int length = pairs.size();    int count = 0;    int end = INT_MIN;    for (int i = 0; i < length; i++) {      if (pairs[i][0] > end) {        count++;        end = pairs[i][1];      }    }    return count;  }private:  static bool cmp(vector<int> a, vector<int> b) {    return a[1] < b[1];  }};
原创粉丝点击