5703. 最大平均通过率(优先队列)
思路
记录一下lamda 函数写法。
此题思路就是每次选增加的最大的,然后重新入队。
时间复杂度: O ( m l o g n ) O(mlogn) O(mlogn)
code
class Solution {
public:
double maxAverageRatio(vector<vector<int>>& a, int m) {
priority_queue<tuple<double,int,int> >q;
auto fun = [](int x,int y) ->double {
return (double)(x+1)/(y+1)-(double)x/y;
};
for(auto v:a){
q.emplace(fun(v[0],v[1]),v[0],v[1]);
}
while(m--){
auto [x,y,z]=q.top();q.pop();
q.emplace(fun(y+1,z+1),y+1,z+1);
}double ans=0;
while(!q.empty()){
auto [x,y,z]=q.top();q.pop();
ans+=(double)y/z;
}
return ans/a.size();
}
};