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; } };