![](/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.