题解:
class Solution {
public:
typedef std::pair<int, int> pii;
int eatenApples(vector<int>& apples, vector<int>& days) {
std::priority_queue<pii, std::vector<pii>, std::greater<pii>> que;
int result = 0;
int i = 0;
while (i < apples.size()) {
while (!que.empty() && que.top().first <= i) {
que.pop();
}
// 截止时间,这个时间不能使用,假设1
int end_time = i + days[i];
// 苹果个数
int apple_cnt = apples[i];
if (apple_cnt > 0) {
que.push(pii(end_time, apple_cnt));
}
if (!que.empty()) {
// 第i天吃一个苹果
auto f = que.top();
que.pop();
++result;
--f.second;
if (f.second > 0) {
que.push(pii(f.first, f.second));
}
}
++i;
}
while (!que.empty()) {
while (!que.empty() && que.top().first <= i) {
que.pop();
}
if (que.empty()) {
break;
}
auto f = que.top();
que.pop();
// f.first是腐烂的日志-上次的起始日志
int time_interval = f.first - i;
// 苹果个数
int apple_cnt = f.second;
// 使用这个苹果可以吃几天
int days = min(time_interval, apple_cnt);
// 计算后面苹果的天数
result += days;
i += days;
}
return result;
}
};