其他分享
首页 > 其他分享> > 5703. 最大平均通过率(优先队列)

5703. 最大平均通过率(优先队列)

作者:互联网

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

标签:emplace,auto,队列,double,5703,int,ans,fun,通过率
来源: https://blog.csdn.net/weixin_45750972/article/details/114809259