zoukankan      html  css  js  c++  java
  • 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].

    分析

    首先按每个pair的第二个元素从小到大,如果第二个元素相等就按第一个元素从小到大排序,然后dp[i]是第1对pair到第i对pair时最长的子序列pair的递增长度。(O(n^2))

    bool cmp(vector<int> v1,vector<int> v2){
            return v1[1]!=v2[1]?v1[1]<v2[1]:v1[0]<v2[0];
    }
    class Solution {
    public:
        int findLongestChain(vector<vector<int>>& pairs) {
            sort(pairs.begin(),pairs.end(),cmp);
            int dp[pairs.size()+1]={1};
            int longest=1,len=1;
            for(int i=1;i<pairs.size();i++)
                for(int j=i-1;j>=0;j--)
                if(pairs[i][0]>pairs[j][1]){
                    dp[i]=max(dp[j]+1,dp[i]);
                    if(longest<dp[i])
                        longest=dp[i];
                }
            return longest;   
        }
    };
    

    O(n)的解法

    class Solution {
    public:
        int findLongestChain(vector<vector<int>>& pairs) {
            sort(pairs.begin(), pairs.end(), cmp);
            int cnt = 0;
            vector<int>& pair = pairs[0];
            for (int i = 0; i < pairs.size(); i++) {
                if (i == 0 || pairs[i][0] > pair[1]) {
                    pair = pairs[i];
                    cnt++;
                }
            }
            return cnt;
        }
    
    private:
        static bool cmp(vector<int>& a, vector<int>&b) {
            return a[1] < b[1] || a[1] == b[1] && a[0] < b[0];
        }
    };
    
    
  • 相关阅读:
    RTC驱动程序分析
    Linux下的RTC子系统
    [置顶] 谈EXPORT_SYMBOL使用
    《Linux内核修炼之道》精华分享与讨论(5)——Kernel地图:Kconfig与Makefile
    写出高效优美的单片机C语言代码
    哈夫曼树
    如何提高浮点数变整数的精度
    CF798C Mike and gcd problem
    CF822C Hacker, pack your bags!
    CF821C Okabe and Boxes
  • 原文地址:https://www.cnblogs.com/A-Little-Nut/p/10079942.html
Copyright © 2011-2022 走看看