leetcode演算法題 最長數對鏈

2021-10-04 17:23:11 字數 888 閱讀 1588

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 後面。我們用這種形式來構造乙個數對鏈。給定乙個對數集合,找出能夠形成的最長數對鏈的長度。你不需要用到所有的數對,你可以以任何順序選擇其中的一些數對來構造...