力扣题解( 最长数对链)

646. 最长数对链

给你一个由 n 个数对组成的数对数组 pairs ,其中 pairs[i] = [lefti, righti] 且 lefti < righti 。

现在,我们定义一种 跟随 关系,当且仅当 b < c 时,数对 p2 = [c, d] 才可以跟在 p1 = [a, b] 后面。我们用这种形式来构造 数对链 。

找出并返回能够形成的 最长数对链的长度 。

你不需要用到所有的数对,你可以以任何顺序选择其中的一些数对来构造。

思路:

规定dp[i]是以i位置元素为最后一个元素的最大长度,此时dp[i]与dp[i-1]之间的关系无法确定,因为pair数组此时是无序的,以i位置元素为最后一个的最大长度可能包含下标大于i的元素,因此需要先对pairs数组重新排列,保证以i位置为最后一个元素时,所有可能包含的元素全在(0-i-1)中。为保证这个特性,规定一个比较函数,然后对pairs重新排雷,比较的方法可以是比较pair所有的right元素,或者比较left元素,然后按照从小到大排列。之所以按照left,right都行的原因是,若按照left排,则(0-i-1)的所有的right元素有小于或大于i位置处left元素,而(i+1-n)位置元素的right位置元素一定大于i位置left元素。而以right比较时,(i+1,n)位置的元素的right大于i位置left,故以left或right作比较元素均可以满足要求。

class Solution {
public:
   static bool cmp(const vector<int>&p1,const vector<int>&p2) 
    {
        return p2[0]>p1[0];
    }
    int findLongestChain(vector<vector<int>>& pairs) {
    int n=pairs.size();
    sort(pairs.begin(),pairs.end(),cmp);

    vector<int>dp(n,1);
    vector<int>maxx(n);
    maxx[0]=pairs[0][1];
    dp[0]=1;
    for(int i=1;i<n;i++)
    {  
        int a=pairs[i][0];
        int b=pairs[i][1];
       for(int j=0;j<i;j++)
       {

         if(a>maxx[j])
         {
            //有构成新的最长的可能
            if(dp[i]<dp[j]+1)
            {
                dp[i]=dp[j]+1;
            }
         }
         maxx[i]=b;

       }
    }

    int ret=dp[0];
    for(auto e:dp)
    {
        ret=max(ret,e);
    }

    return ret;




    }
};

相关推荐

  1. 题解

    2024-07-13 16:12:04       21 阅读
  2. 题解湍流子组)

    2024-07-13 16:12:04       24 阅读
  3. 题解等差数列)

    2024-07-13 16:12:04       22 阅读
  4. 题解递增子序列)

    2024-07-13 16:12:04       24 阅读
  5. 题解定差子序列)

    2024-07-13 16:12:04       26 阅读
  6. [题解]53. 大子组和

    2024-07-13 16:12:04       31 阅读
  7. 题解(乘积大子组)

    2024-07-13 16:12:04       24 阅读
  8. 题库第3题:连续序列

    2024-07-13 16:12:04       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 16:12:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 16:12:04       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 16:12:04       58 阅读
  4. Python语言-面向对象

    2024-07-13 16:12:04       69 阅读

热门阅读

  1. 嵌入式单片机项目开发的基本思想分享

    2024-07-13 16:12:04       20 阅读
  2. uni-app 蓝牙传输

    2024-07-13 16:12:04       19 阅读
  3. termux 安装 rockylinux

    2024-07-13 16:12:04       22 阅读
  4. 阿里云通义千

    2024-07-13 16:12:04       21 阅读
  5. 前端实现PDF文件打印和下载

    2024-07-13 16:12:04       19 阅读
  6. docker 安装orcale11数据库

    2024-07-13 16:12:04       22 阅读
  7. 缓冲区共享和同步dma_buf 之二

    2024-07-13 16:12:04       20 阅读
  8. Kylin的优缺点

    2024-07-13 16:12:04       19 阅读
  9. 【C语言】头文件命名详解 - 《铁头无敌 ! 》

    2024-07-13 16:12:04       21 阅读