leetcode 170five. Maximum Number of Eaten Apples

Problem: 1705. 吃苹果的最大数目

堆优先队列,堆首保存腐败时间和剩下的苹果,每次吃最先腐败的苹果,后腐败后吃的,等n日过去以后,就可以根据时间和苹果来判断吃完还是扔掉一部分,吃完时间只需要累加苹果数量,扔掉一部分时间到了最晚的

Code

using pr = pair<int, int>; class Solution { public: int eatenApples(vector<int>& apples, vector<int>& days) { priority_queue<pr, vector<pr>, decltype(greater<pr>())> pq; int n = apples.size(), sum = 0, num, deadline; for(int i = 0; i < n; i++) { pq.push({days[i] + i, apples[i]}); while(!pq.empty() && pq.top().first <= i) pq.pop(); if(!pq.empty()) { sum += 1; num = pq.top().second; deadline = pq.top().first; num--; pq.pop(); if(num != 0) pq.push({deadline, num}); } } int now = n; while(!pq.empty()) { if(pq.top().first - now < pq.top().second) { sum += pq.top().first - now; now = pq.top().first; } else { sum += pq.top().second; now += pq.top().second; } pq.pop(); } return sum; } };