繁体   English   中英

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

[英]Find the number of non-empty subsets S such that min(S) + max(S) <= K

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM