问题描述:
给出
n
个数对。 在每一个数对中,第一个数字总是比第二个数字小。
现在,我们定义一种跟随关系,当且仅当 b < c
时,数对(c, d)
才可以跟在 (a, b)
后面。我们用这种形式来构造一个数对链。
给定一个对数集合,找出能够形成的最长数对链的长度。你不需要用到所有的数对,你可以以任何顺序选择其中的一些数对来构造。
示例 :
输入: [[1,2], [2,3], [3,4]]
输出: 2
解释: 最长的数对链是 [1,2] -> [3,4]
注意:给出数对的个数在[1, 1000]
范围内。
问题分析:
可以用贪心算法来解决,首先以数组中的每个元素的第二值为关键字进行排序,然后扫描一遍数组,看看能否首尾衔接的住?如果不能就舍弃,依次累计,即可。
Python3实现:
class Solution:
def findLongestChain(self, pairs):
pairs.sort(key=lambda x: x[1]) # 以第二个数子,进行排序
last = [float('-inf'), float('-inf')]
ans = 0
for cur in pairs: # 贪心的,进行求解
if cur[0] > last[1]:
ans += 1
last = cur
return ans
if __name__ == '__main__':
pairs = [[1, 2], [2, 3], [3, 4]]
solu = Solution()
print(solu.findLongestChain(pairs))
欢迎指正哦。