【刷题日记】最长数对链

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

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

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

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

【刷题日记】最长数对链_第1张图片

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

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

然后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;ipairs[j][1]){
                dp[i]=Math.max(dp[i],dp[j]+1);
            }
        }
        if(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']

你可能感兴趣的:(算法题题解,算法,数据结构)