给你一个由 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']