2017-06-06 92 views
1

例如,我們有[0, 1, 3, 5, 7, 8, 9, 10, 12, 13]如何查找數組中最長的連續數字鏈

結果必須是7, 8, 9, 10,因爲它們彼此相鄰,指數明智並且是連續的整數,並且該鏈比0, 1長。

英語不是我的第一語言,請原諒,如果寫作有點模糊。

+0

某種類型的代碼高爾夫球或功課這裏 – fechnert

+0

的你嘗試過這麼遠嗎? – Nuageux

+0

這不是家庭作業,我試圖用這種方法解決問題,但似乎無法解決它 –

回答

3

組項目到基於從增加計數(由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

這真是太棒了。 –

1
使用 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

相關問題