码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • leetcode_1792 最大平均通过率


    1. 题意

    给定一个班级数组,每个班级包括总人数和通过人数。现在可以加入k个通过的学生到任意班级,求

    最大的平均通过率。

    最大平均通过率

    2. 题解

    假设某一班级总人数为m, 通过人数为n,则加入一个通过的学生对通过率的增加 d i f f diff diff为

    n + 1 m + 1 − n m = m − n m ( m + 1 ) \frac{n+1}{m+1} - \frac{n}{m} = \frac{m -n}{m(m + 1)} m+1n+1​−mn​=m(m+1)m−n​

    我们可以通过维护班级的 d i f f diff diff值的最大堆来解决这个问题。

    由于 0 ≤ n ≤ m ≤ 1 e 5 0 \le n \le m \le 1e5 0≤n≤m≤1e5

    在比较两个班级的 d i f f diff diff值的时候可以换为乘法

    即判断
    ( m 0 − n 0 ) ∗ m 1 ( m 1 + 1 ) < ( m 1 − n 1 ) ∗ m 0 ( m 0 + 1 ) (m_0 - n_0) *m_1(m_1 + 1) < (m_1 - n_1) * m_0 (m_0+1) (m0​−n0​)∗m1​(m1​+1)<(m1​−n1​)∗m0​(m0​+1)
    的布尔值即可

    2.1 解法1

    优先队列

    class Solution {
    
        struct classRate {
    
    
            classRate(int a,int b):pass(a),total(b) {
    
            } 
        
            bool operator <( const classRate &b) const{
    
                long long a1 = 1ll * (total - pass) * (b.total) * (b.total + 1);
                long long a2 = 1ll * (b.total - b.pass) * (total) * (total + 1);
    
                return a1 < a2;
            }
            int  total;
            int  pass;
        };
    
    public:
        double 
        maxAverageRatio(vector<vector<int>>& classes, int extraStudents) {
    
            std::priority_queue<classRate> rPq;
    
            for(auto &v:classes) {
    
                classRate elm(v[0], v[1]);
    
                rPq.push(elm);
            }
    
            int i = 0;
            while (i < extraStudents) {
    
                classRate cur = rPq.top();
                rPq.pop();
    
                cur.total += 1;
                cur.pass += 1;
    
                rPq.push(cur);
    
                i++;
            }
    
            double res = 0;
            while (!rPq.empty()) {
                classRate cur = rPq.top();
                rPq.pop();
    
                res += (double) cur.pass / cur.total;
            }
    
            return res/classes.size();
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    2.2 解法二

    中位数分治,暂时还没看懂。先放一个题解在这里吧。
    中位数分治

  • 相关阅读:
    11.24总结二叉树
    Informer学习记录之Informer-Tensorflow版本
    算法基础学习|排序
    基于javaweb房屋租赁管理系统的设计与实现
    【一周安全资讯1021】工业和信息化部等六部门印发《算力基础设施高质量发展行动计划》;思科未修补的零日漏洞正被积极利用
    C++功能模块5:在图像里截取矩形子图
    LeetCode 第8题:字符串转换整数(Python3解法)
    python os.system( 没有那个文件或目录
    修炼离线:(二)sqoop插入hbase 脚本(增量)
    基于JavaSwing开发文件传输与聊天系统 课程设计 大作业 毕业设计
  • 原文地址:https://blog.csdn.net/bdn_nbd/article/details/134089231
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号