• 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];
        }
    };
    
    
  • 相关阅读:
    套接字编程,创建套接字socket
    网络编程基本原理
    进一步学习的书籍
    C# 基础备忘录
    二进制转文件以及文件压缩和解压缩
    使用用WCF中的双工(Duplex)模式将广告图片推送到每个Winform客户端机子上
    C#两个日期范围内的间隔
    C#中XML文档注释编译DLL引用到其它项目
    用T4模版生成对应数据库表的实体类
    lodop打印控件需要开启的几个计算机服务
  • 原文地址:https://www.cnblogs.com/A-Little-Nut/p/10079942.html
Copyright © 2020-2023  润新知