![](/img/trans.png)
[英]Why is declaring an empty array of non-empty array(s) legal in Java?
[英]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]
,我们想要计算包含1
和6
所有子集。 1到6之间有4个项目; 并且我们正在计算的所有子集将包含或不包含任何[2,3,4,5]
。 由于它们是 4 个项目,因此有2^4
不同的子集。
所以对于解决方案; 您可以遍历数组(复杂度N
)并选择最小值; 迭代以下项目并选择最大值(再次复杂度N
); 并计算i
和j
之间的子集数量(它们是2^n
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.