646. Maximum Length of Pair Chain
2018-10-08 22:29
633 查看
问题
给定n对数,每对数里面第一个数比第二个数小。现在定义(c,d)可以跟在(a,b)后面组串,如果b<c。问最多能组多长的串。
Input: [[1,2], [2,3], [3,4]]
Output: 2
Explanation: [1,2] -> [3,4]
思路
当(a,b)和(c,d)组串时,要满足b<c,此时a<b,c<d所以有a<b<c<d。
继续组串的话,要用d去找,找到一个(e,f),满足d<e,而e又小于f,接着根据f去找。
可以看到每次要组新串时候需要根据第二个数去找,为了能让串尽量长,我们要让第二个数尽量小(这样就可以拉很多个)。
所以直觉的想法就是把这些数据对按第二个数从小到大排序,然后从前往后串,能组就组,不能组就跳过,直到遍历完全部。
时间复杂度O(n),空间复杂度O(1)
代码
class Solution(object): def findLongestChain(self, pairs): """ :type pairs: List[List[int]] :rtype: int """ cur = float('-inf') res = 0 for x, y in sorted(pairs, key= lambda a : a[1]): if x > cur: res += 1 cur = y return res
相关知识
float('inf') # python正无穷,所有数都比它小 float('-inf') # python负无穷,所有数都比它大 l.sort() # python内置的排序函数,在本地排序,不返回副本 l2 = sorted(l) # 返回一个副本,原始输入不变。 l = [ [2,4], [8,16,32,64], [128,256,512]] sorted(l, key= lambda a : a[1]) # 按第二维的值进行升序排序 sorted(l, key= lambda a : len(a), reverse=True) # 按长度进行降序排序
相关文章推荐
- 关于navicat ssh连接中ssh tunnel:the negotiation of encryption is failed的问题
- 单调队列(滑动窗口):纪念我因head tail的WA
- HDU-2473 Junk-Mail Filter(并查集删除节点)
- 人工智能非技术从业者必知的十件事
- LeetCode Day9 container_with_most_water
- 各位大佬,别再拿人工智能当春药了!
- 进程间操作 raise 与 kill
- 【问题解决:死锁】Lock wait timeout exceeded; try restarting transaction的问题
- 田奇:行人再识别的挑战和最新进展
- JedisDataException: ERR invalid longitude,latitude pair 0.589246,85.149780
- LeetCode-Algorithms #007 Reverse Integer, Database #182 Duplicate Emails
- 解决mei_me 0000:00:16.0:initialization failed.错误
- 使用UltraISO制作U启
- 人工智能在硬件及芯片层面不断创新被广泛应用的各个领域
- ChainLink 预言机已有测试版本|标准共识评级
- ZOJ1937 Addition Chains
- 【论文精读】Select Via Proxy: Efficient Data Selection For Training DeepNetworks
- 人工智能最难取代的13种工作和最容易被取代的10种工作
- 使用Guava的ComparisonChain实现自定义的排序
- Hi,请收下这份最全的行业AI盛会漫游攻略~