如何从数组中找到所有子集,而子集中的所有元素的相减绝对值均小于python中的8?

时间:2019-03-11 22:40:02

标签: python arrays sorting

我有一个数组或列表,例如{17,24,25,33,38,42,50}。如何从数组中找到所有子集,或列出子集中所有元素的相减绝对值小于8的所有元素?例如,{17,24,25},{38,42},{42,50}是正确的子集,因为子集中的所有元素的相减绝对值都小于8,但是{17,24,25, 33}不是因为| 33 -17 |大于8。

1 个答案:

答案 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。