【发布时间】:2021-04-09 04:09:28
【问题描述】:
给定一个大小为 n 的数组,我们必须检查是否可以将 Array 的元素分成两个子集,使得两个子集的总和至少为 k。
我该如何解决这个问题?
我的方法:
我想到了一种贪婪的方法来获取所有较大的元素直到它达到 k 并检查是否total_sum-sum>=k。但是这个逻辑是不正确的。
我认为的另一种方法是蛮力,简单地递归所有可能的子集并找出它是否满足我的条件。但它的时间复杂度是指数级的,即使在使用 DP 之后它也是O(n^2)
但是2<=n<=2*10^5.
你能帮我找到解决这个问题的最佳方法吗?
【问题讨论】:
-
“2
-
@ScottHunter,这告诉我们解算法的复杂度可能应该低于 O(n^2)
-
子集总和 DP 的简单变体。
-
我尝试了 DP 方法,但它在一些测试用例上提供了 TLE,所以我想知道是否有另一种方法(可能是某种贪婪)具有更低的时间复杂度,小于 O(n^2)
标签: arrays algorithm sorting optimization