对于给定的整数和整数K
的向量,找到非空子集S
的数量,使得min(S) + max(S) <= K
例如,对于K = 8
和向量[2, 4, 5, 7]
,解为5:([2], [4], [2, 4], [2, 4, 5], [2, 5])
。
时间复杂度应为O(n ^ 2)。
答案 0 :(得分:1)
在算法方面:正如您已经说过的,存在一个(基本)解决方案,其中我们计算所有子集;但是对子集进行迭代具有指数级的复杂性。
我们可以优化计数:以集合S=[1,2,3,4,5,6]
为例,我们要对同时包含1
和6
的所有子集进行计数。 1至6之间有4个项目;并且我们正在计算的所有子集将包含或不包含[2,3,4,5]
中的任何一个。由于它们是4个项目,因此有2^4
个不同的子集。
因此解决方案;您可以遍历数组(复杂度N
)并选择最小值;遍历以下各项并选择最大值(再次复杂度N
);并计算i
和j
之间的子集数量(它们是2^n
)。