题目一:1792. 最大平均通过率
最大平均通过率
思路:
- 使用优先队列完成数据第一次排序。(优先队列与队列的区别在与其优先级,即可以以我们的意愿定义合适的优先级)== 本题中要使得班级j的优先级比班级i的优先级大
==

将此式化简为

此时便不得不提
该数据优先级的定义,毕竟我们我们只有定义优先级才能使得该队列以特定的顺序存储。==而此时我们不能简单的在定义队列时写(greater,less)了,而应定义结构体时使用 bool operato
bool operator<(const Ratio& oth)const{
return (long long)(oth.total+1)*oth.total*(total-pass)<(long long)(total+1)*total*(oth.total-oth.pass);
注意*‘<’右边便是优先级高的值,其位置更靠前,先弹出.
此式我们每从队列中弹出的数据,经过处理得到的增长率最高)。
c++的默认降序队列
代码
class Solution {
public:
struct Ratio{
int pass,total;
bool operator<(const Ratio& oth)const{
return (long long)(oth.total+1)*oth.total*(total-pass)<(long long)(total+1)*total*(oth.total-oth.pass);
}
};
double maxAverageRatio(vector<vector<int>>& classes, int extraStudents) {
double ans=0;
priority_queue<Ratio>q;
for(auto &c:classes)
{
q.push({c[0],c[1]});
}
for(int i=0;i<extraStudents;i++)
{
auto[pass,total]=q.top();
q.pop();
q.push({pass+1,total+1});
}
for(int i=0;i<classes.size();i++)
{
auto[pass,total]=q.top();
q.pop();
ans+=1.0*pass/total;
}
return ans/classes.size();
}
};
利用优先队列优化最大平均通过率算法,
文章讲述了如何使用优先队列(C++中的`priority_queue`)来解决最大平均通过率问题。通过对结构体自定义比较操作符,以优化的顺序存储和处理班级数据,每次从队列中取出增长率最高的班级进行调整。最终计算出在增加一定数量学生后的平均通过率。
844

被折叠的 条评论
为什么被折叠?



