1、動態規劃
dp[i]表示第i個位置最長的數對鏈的長度
狀態轉移
dp[i]
=max
(dp[j]+1
); j從0到i
不過題目的數對是可以亂序的,所以我們先提前給按數對第乙個數來從小到大排序,然後再進行動態規劃。其實根據第二種貪心演算法,按第二個數來排序更好!
static
bool
lessvector
(const vector<
int>
&vec1,
const vector<
int>
&vec2)
intfindlongestchain
(vectorint>>
& pairs)
max_len=
max(max_len,dp[i]);
}return max_len;
}
2、貪心演算法
按數對第二個數排序,這樣就可以從所有符合條件的下乙個數對中找第二個數最小的數對,達到貪心的效果。
static
bool
lessvector
(const vector<
int>
&vec1,
const vector<
int>
&vec2)
intfindlongestchain
(vectorint>>
& pairs)
}return count;
}
可以看出第二個數權重更大 貪心演算法 leetcode最長數對鏈
給出 n 個數對。在每乙個數對中,第乙個數字總是比第二個數字小。現在,我們定義一種跟隨關係,當且僅當 b c 時,數對 c,d 才可以跟在 a,b 後面。我們用這種形式來構造乙個數對鏈。給定乙個對數集合,找出能夠形成的最長數對鏈的長度。你不需要用到所有的數對,你可以以任何順序選擇其中的一些數對來構造...
LeetCode 646 最長數對鏈
usr bin python3 coding utf 8 time 2019 3 16 author xfli the file.問題分析 可以用貪心演算法來解決,首先以陣列中的每個元素的第二值為關鍵字進行排序,然後掃瞄一遍陣列,看看能否首尾銜接的住?如果不能就捨棄,依次累計,即可。def find...
LeetCode 最長數對鏈(動態規劃)
給出 n 個數對。在每乙個數對中,第乙個數字總是比第二個數字小。現在,我們定義一種跟隨關係,當且僅當 b c 時,數對 c,d 才可以跟在 a,b 後面。我們用這種形式來構造乙個數對鏈。給定乙個對數集合,找出能夠形成的最長數對鏈的長度。你不需要用到所有的數對,你可以以任何順序選擇其中的一些數對來構造...