我有一个数组或列表,例如{17,24,25,33,38,42,50}。如何从数组中找到所有子集,或列出子集中所有元素的相减绝对值小于8的所有元素?例如,{17,24,25},{38,42},{42,50}是正确的子集,因为子集中的所有元素的相减绝对值都小于8,但是{17,24,25, 33}不是因为| 33 -17 |大于8。
答案 0 :(得分:1)
如果我们首先对数组进行排序,则可以建立类似滑动窗口的样式。根据数据的实际分布,枚举最多需要二次时间。
def subsets(l, max_diff):
sorted_list = sorted(l)
for i, low in enumerate(sorted_list):
for j, high in enumerate(sorted_list[i:], start=i+1):
if high - low > max_diff:
break
yield sorted_list[i:j]
请注意,如果要将截止值设置为8,则max_diff应该为7。