★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-mlhqtuiw-me.html
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html
You are given n
pairs of numbers. In every pair, the first number is always smaller than the second number.git
Now, we define a pair (c, d)
can follow another pair (a, b)
if and only if b < c
. Chain of pairs can be formed in this fashion.github
Given a set of pairs, find the length longest chain which can be formed. You needn't use up all the given pairs. You can select pairs in any order.微信
Example 1:this
Input: [[1,2], [2,3], [3,4]] Output: 2 Explanation: The longest chain is [1,2] -> [3,4]
Note:spa
給出 n
個數對。 在每個數對中,第一個數字老是比第二個數字小。code
如今,咱們定義一種跟隨關係,當且僅當 b < c
時,數對(c, d)
才能夠跟在 (a, b)
後面。咱們用這種形式來構造一個數對鏈。orm
給定一個對數集合,找出可以造成的最長數對鏈的長度。你不須要用到全部的數對,你能夠以任何順序選擇其中的一些數對來構造。htm
示例 :blog
輸入: [[1,2], [2,3], [3,4]] 輸出: 2 解釋: 最長的數對鏈是 [1,2] -> [3,4]
注意:
1 class Solution { 2 func findLongestChain(_ pairs: [[Int]]) -> Int { 3 var pairs = pairs 4 var res:Int = 0 5 var end:Int = Int.min 6 pairs.sort(by:{(a:[Int],b:[Int]) -> Bool in 7 return a[1] < b[1] 8 }) 9 for pair in pairs 10 { 11 if pair[0] > end 12 { 13 res += 1 14 end = pair[1] 15 } 16 } 17 return res 18 } 19 }
284ms
1 class Solution { 2 func findLongestChain(_ pairs: [[Int]]) -> Int { 3 let sortPairs = pairs.sorted { $0[1] < $1[1] } 4 var ans = 0, curEnd = Int.min 5 for pair in sortPairs { 6 if pair[0] > curEnd { 7 ans += 1 8 curEnd = pair[1] 9 } 10 } 11 return ans 12 } 13 }
296ms
1 class Solution { 2 func findLongestChain(_ pairs: [[Int]]) -> Int { 3 guard pairs.count > 1 else{ 4 return pairs.count 5 } 6 let sorted = pairs.sorted(by: {$0[1] < $1[1]}) 7 var count : Int = 1 8 var currentPair = sorted[0] 9 for pair in sorted{ 10 if pair.first! > currentPair.last!{ 11 count += 1 12 currentPair = pair 13 } 14 } 15 return count 16 } 17 }
1260ms
1 sample 1260 ms submission 2 class Solution { 3 func findLongestChain(_ pairs: [[Int]]) -> Int { 4 let n = pairs.count 5 if n <= 1{ return n } 6 7 let sorted = pairs.sorted { $0[0] < $1[0] } 8 var f = [Int](repeating: 1, count: n) 9 var result = 1 10 11 for i in 1..<n { 12 for j in 0..<i { 13 if sorted[j][1] < sorted[i][0] { 14 f[i] = max(f[i], f[j] + 1) 15 result = max(result, f[i]) 16 } 17 } 18 } 19 20 return result 21 } 22 }
1272ms
1 class Solution { 2 func findLongestChain(_ pairs: [[Int]]) -> Int { 3 guard pairs.count > 1 else { return 1 } 4 let pairs = pairs.sorted(by: { 5 return $0[0] < $1[0] 6 }) 7 8 let n = pairs.count 9 var dp: [Int] = Array(repeating: 0, count: n) 10 dp[0] = 1 11 12 for i in 1 ..< n { 13 for j in 0 ..< i { 14 if pairs[i][0] > pairs[j][1] { 15 dp[i] = max(dp[i], dp[j]) 16 } 17 } 18 dp[i] += 1 19 } 20 21 return dp[n - 1] 22 } 23 }