如何查找数组中最长的连续数字链

问题描述:

例如,我们有[0, 1, 3, 5, 7, 8, 9, 10, 12, 13]如何查找数组中最长的连续数字链

结果必须是7, 8, 9, 10,因为它们彼此相邻,指数明智并且是连续的整数,并且该链比0, 1长。

英语不是我的第一语言,请原谅,如果写作有点模糊。

+0

某种类型的代码高尔夫球或功课这里 – fechnert

+0

的你尝试过这么远吗? – Nuageux

+0

这不是家庭作业,我试图用这种方法解决问题,但似乎无法解决它 –

组项目到基于从增加计数(由itertools.count对象提供)常数差异使用itertools.groupby子序列,然后使用内置max参数len取最长子:

from itertools import groupby, count 

lst = [0, 1, 3, 5, 7, 8, 9, 10, 12, 13] 
c = count() 
val = max((list(g) for _, g in groupby(lst, lambda x: x-next(c))), key=len) 
print(val) 
# [7, 8, 9, 10] 

您可以在结果中包含组密钥(禁止为_)以进一步了解其工作原理。

+2

这真是太棒了。 –

使用 numpy模块

替代解决方案:

import numpy as np 

nums = np.array([0, 1, 3, 5, 7, 8, 9, 10, 12, 13]) 
longest_seq = max(np.split(nums, np.where(np.diff(nums) != 1)[0]+1), key=len).tolist()  
print(longest_seq) 

输出:

[7, 8, 9, 10] 

  • np.where(np.diff(nums) != 1)[0]+1 - 得到在其上排列应拆分元素的索引(如果差在两个连续数字之间不等于1,例如35

  • np.split(...) - 分裂数组子阵列

https://docs.scipy.org/doc/numpy-dev/reference/generated/numpy.diff.html#numpy.diff https://docs.scipy.org/doc/numpy-dev/reference/generated/numpy.split.html