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();
    }
};
上一篇:STL之map容器的三种插入方式insert emplace emplace_hint那种效率更高


下一篇:矩阵转置 emplace_back()函数