【刷题日记】最长数对链

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

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

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

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

思路 :这道题其实,还是和前一个很像,只不过是数组对找最长递增序列的感觉。

我们需要{对数组}对数组先排个序。

然后dp【i】含义设置为以pairs【i】【1】为结尾的最长递增序列长度。

当pairs【i】【0】>pairs【j】【1】时,dp【i】=max(dp【i】,dp【j】+1);

代码(JavaScript):

/**
 * @param {number[][]} pairs
 * @return {number}
 */
var findLongestChain = function(pairs) {
    const n=pairs.length;
    pairs.sort((a,b)=>a[0]-b[0]);
    const dp=new Array(n+1).fill(1);
    let res=0;
    for(var i=0;i<n;i++){
        for(var j=0;j<i;j++){
            if(pairs[i][0]>pairs[j][1]){
                dp[i]=Math.max(dp[i],dp[j]+1);
            }
        }
        if(res<dp[i])res=dp[i];
    }
    return res;
};

这里提一下JavaScript的sort函数:

http://t.csdnimg.cn/lVfoN (我为此专门写的讲解JavaScript的sort函数的一篇小博客)

sort 接受两个参数(通常称之为`a`和`b`),并根据以下规则返回一个值来确定它们的排序顺序:

- 如果返回值 小于 0,则将`a`排在`b`之前。
- 如果返回值 大于 0,则将`b`排在`a`之前。
- 如果返回值 等于 0,则`a`和`b`的相对位置不变

示例

const items = ['Banana', 'Orange', 'Apple', 'Mango'];
items.sort((a, b) => a.length - b.length);//从小到大排序
console.log(items); // 输出: ['Apple', 'Mango', 'Banana', 'Orange']
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值