求出非空子集S的数量,使得min(S)+ max(S)<= K

时间:2019-02-24 15:17:15

标签: java algorithm

对于给定的整数和整数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)。

1 个答案:

答案 0 :(得分:1)

在算法方面:正如您已经说过的,存在一个(基本)解决方案,其中我们计算所有子集;但是对子集进行迭代具有指数级的复杂性。

我们可以优化计数:以集合S=[1,2,3,4,5,6]为例,我们要对同时包含16的所有子集进行计数。 1至6之间有4个项目;并且我们正在计算的所有子集将包含或不包含[2,3,4,5]中的任何一个。由于它们是4个项目,因此有2^4个不同的子集。

因此解决方案;您可以遍历数组(复杂度N)并选择最小值;遍历以下各项并选择最大值(再次复杂度N);并计算ij之间的子集数量(它们是2^n)。