如何查找数组中最长的连续数字链
问题描述:
例如,我们有[0, 1, 3, 5, 7, 8, 9, 10, 12, 13]
。如何查找数组中最长的连续数字链
结果必须是7, 8, 9, 10
,因为它们彼此相邻,指数明智并且是连续的整数,并且该链比0, 1
长。
英语不是我的第一语言,请原谅,如果写作有点模糊。
答
组项目到基于从增加计数(由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
,例如3
和5
)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
某种类型的代码高尔夫球或功课这里 – fechnert
的你尝试过这么远吗? – Nuageux
这不是家庭作业,我试图用这种方法解决问题,但似乎无法解决它 –