一名经理被指派去处理公司休息室的食物浪费现象。 休息室里有几包奶精,每包都有有效期,奶精必须在有效期之内使用。 经理还可以选择从杂货店订购额外的奶精,每一包奶精都有不同的有效期。 给定每日对奶精的最大需求量,求出经理在不浪费的情况下可以订购的最大奶精数量。 输入包括三个参数:
onHand[]:一个整数数组表示已有的个奶精的保质期
supplier[]:一个整数数组表示可以选择订购的奶精的保质期
demand:每天最多可以消耗的奶精数量
请返回在没有浪费的情况下可以订购的最大奶精数量,如果一定会有浪费则返回 -1
样例
样例
输入
[0,2,2]
[2,0,0]
2
输出
2
解释
休息室中有三个奶精保质期分别为[0,2,2]天
店里有三个奶精保质期分别为[2,0,0]天
职员最多每天消耗2个奶精
int stockLounge(vector<int> &onHand, vector<int> &supplier, int demand) {
// write your code here
int left = 0, right = 0;
int leftSize = onHand.size(), rightSize = supplier.size();
int ret = 0;
int consumer = 0;
sort(onHand.begin(), onHand.end());
sort(supplier.begin(), supplier.end());
int day = 0;
while (right < rightSize)
{
while (left < leftSize && right < rightSize && consumer < demand && onHand[left] <= supplier[right])
{
left++;
consumer++;
}
while (left < leftSize && right < rightSize && consumer < demand && onHand[left] > supplier[right])
{
right++;
consumer++;
ret++;
}
while (left >= leftSize && right < rightSize && consumer < demand )
{
right++;
consumer++;
ret++;
}
if (left < leftSize && onHand[left] - day == 0)
{
return -1;
}
while (right < rightSize && supplier[right] - day == 0 )
{
right++;
}
consumer = 0;
day++;
}
if (ret > 0)
{
return ret;
}
else
{
return -1;
}
}