我在准备面试时遇到了一个问题。 给定一个整数数组作为输入。 我们找到了一个可能的子集,使得数组中的元素具有共同的差异。 例如, 考虑输入数组为{1,3,7,10,11} 那么输出应该是{3,7,11}。 始终是数组中的元素按递增顺序排列。 我想找到所有子集并寻找解决方案。 但是如果输入数组太大,那将导致我的程序运行速度变慢。 任何人都可以帮我解决这个问题吗?
答案 0 :(得分:0)
据我所知,您希望从数组中提取可能的子集,使每两个连续的数字具有相同的差值。
这是我的算法:
这是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]
如果错误,请尝试使用此代码并进行更正。我匆匆写了这篇文章。