Problem:
对于一个整数数列A[0], A[1], ..., A[N-1]进行分组,要求每组1到2个数,并且同组之和不能大于w. 求最少可以分成多少组.
1 <= N <= 100000, 1 <= A[i] <= w <= 1000000000.
请实现下面Solution类中计算minPartition(A, w)的函数.
class Solution {
public:
int minPartition(vector<int> A, int w) {
}
};
例1:当A = {2, 5, 4, 3}, w = 5, minPartition(A, w)返回3. 将2和3放一组,4和5各自单独作为一组,共3组.
例2:当A = {2, 5, 4, 3}, w = 7, minPartition(A, w)返回2. 将2和5放一组,3和4一组,共2组.
注意:你只需要提交Solution类的代码,你在本地可以编写main函数测试程序,但不需要提交main函数的代码. 注意不要修改类和函数的名称.
Solution:
class Solution {
public:
int minPartition(vector<int> A, int w) {
sort(A.begin(), A.end());
int i = 0, j = A.size() - 1;
int count = 0;
while (i <= j)
{
if (i == j)
{
count++;
break;
}
if (A[i] + A[j] > w)
{
count++;
j--;
}
else
{
count++;
j--;
i++;
}
}
return count;
}
};
本文介绍了一种针对整数数列的最优分组算法,目标是最小化分组数量,使得每组内元素之和不超过给定阈值。适用于约束条件为1 <= N <= 100000 和 1 <= A[i] <= w <= 1000000000 的场景。通过排序和双指针技巧实现了高效求解。

被折叠的 条评论
为什么被折叠?



