据我所知,你想从数组中提取可能的子集,使得每两个连续的数字越来越多地具有相同的差异值。
这里是我的算法:
- 删除重复。
- 强制安排递增。
- 保留一个哈希表,其中的差值作为键和列表的列表作为值。
- 循环访问数组,在散列表中更新/添加一个等于当前两个连续数字之间差值的密钥,并将列表添加到包含这两个数字的值(列表列表)中。
- 循环后,创建一个数组。遍历哈希表,每次向数组本身添加一个元素,该数组本身就是一个数组:将所有嵌套列表合并到手头的值中。这是包含所有可能子集的数组。
这里是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
是最大的子集... –