據我所知,你想從數組中提取可能的子集,使得每兩個連續的數字越來越多地具有相同的差異值。
這裏是我的算法:
- 刪除重複。
- 強制安排遞增。
- 保留一個哈希表,其中的差值作爲鍵和列表的列表作爲值。
- 循環訪問數組,在散列表中更新/添加一個等於當前兩個連續數字之間差值的密鑰,並將列表添加到包含這兩個數字的值(列表列表)中。
- 循環後,創建一個數組。遍歷哈希表,每次向數組本身添加一個元素,該數組本身就是一個數組:將所有嵌套列表合併到手頭的值中。這是包含所有可能子集的數組。
這裏是Python中的可能的實現:
from itertools import chain
def find_subsets (array):
table = dict()
last = array[-1]
for num in sorted (set (array), False)[1:]:
diff = last - num
table[diff].append([num, last])
last = num
return [list(chain(v)) for k, v in table]
請試試這個代碼,如果錯誤的糾正。我匆忙寫了這篇文章。
你的問題沒有很好地形成:它是否必須是最大的子集?因爲只有第一個元素的集合始終是常量差異的一個子集。 – BeyelerStudios
是最大的子集... –