当前位置: 首页 > news >正文

【每日一题Day123】LC1792最大平均通过率 | 堆

最大平均通过率【LC1792】

一所学校里有一些班级,每个班级里有一些学生,现在每个班都会进行一场期末考试。给你一个二维数组 classes ,其中 classes[i] = [passi, totali] ,表示你提前知道了第 i 个班级总共有 totali 个学生,其中只有 passi 个学生可以通过考试。

给你一个整数 extraStudents ,表示额外有 extraStudents 个聪明的学生,他们 一定 能通过任何班级的期末考。你需要给这 extraStudents 个学生每人都安排一个班级,使得 所有 班级的 平均 通过率 最大

一个班级的 通过率 等于这个班级通过考试的学生人数除以这个班级的总人数。平均通过率 是所有班级的通过率之和除以班级数目。

请你返回在安排这 extraStudents 个学生去对应班级后的 最大 平均通过率。与标准答案误差范围在 10-5 以内的结果都会视为正确结果。

  • 思路:

    • 首先添加每一个学生时,应使通过率的变化值最大,才能获得最大的平均通过率
    • 实现时可以使用大顶堆存储一个二元组,内容各个班级的通过学生和总学生,堆以增加一个通过学生后,通过率的变化值从大到小排序。这样堆顶元素即为添加一个学生通过率变化最大值对应的班级,操作extraStudents次,然后求得最终的平均通过率返回即可
  • 实现

    class Solution {public double maxAverageRatio(int[][] classes, int extraStudents) {PriorityQueue<double[]> pq = new PriorityQueue<double[]>((o1, o2) -> (o2[0] + 1) / (o2[1] + 1) - o2[0] / o2[1] > (o1[0] + 1) / (o1[1] + 1) - o1[0] / o1[1] ? 1 : -1 );for (int[] c : classes){pq.add(new double[]{c[0], c[1]});}for (int i = 0; i < extraStudents; i++){double[] c = pq.poll();pq.add(new double[]{c[0] + 1, c[1] + 1});}double res = 0;while (!pq.isEmpty()){double[] c = pq.poll();res += c[0] / c[1];}return res / classes.length;}
    }
    
    • 复杂度
      • 时间复杂度:O(n+klogn)O(n+klogn)O(n+klogn)nnn为班级数量,kkk为必通过的学生人数,向堆中添加元素的时间复杂度为O(logn)O(logn)O(logn)
      • 空间复杂度:O(n)O(n)O(n),小顶堆的空间复杂度为O(n)O(n)O(n)
http://www.lryc.cn/news/12266.html

相关文章:

  • [安装之5] Mac pro更换大内存固态硬盘实践教程
  • 04 Python变量的声明与使用
  • LeetCode 2418. 按身高排序
  • 一文了解Hotspot虚拟机下JAVA对象从创建到回收的生命周期
  • 【Java基础】Java对象创建的几种方式
  • 社保缴费满15年就可以不缴了?6个很多人最关心的问题权威解答来了
  • 关于HDFS
  • C++入门:类 对象
  • Python生日系统
  • < CSDN周赛解析:第 28 期 >
  • 【题外话】如何拯救小米11Pro这款工业垃圾
  • Python中有哪些常用操作?这20个你都会吗
  • 【LeetCode】剑指 Offer(4)
  • 庄懂的TA笔记(十二)<>
  • 学分绩点(2023寒假每日一题 5)
  • Framework学习之旅:Zygote进程
  • HTTP基础知识
  • Delphi 10.4.2使用传统代码提示方案(auto complete)(转)
  • 存储类别、链接与内存管理(三)
  • Java:Linux(CentOS)安装、配置及相关命令
  • Linux 操作系统原理 — 多任务优先级调度策略
  • 链表学习之找到两个链表相交的第一个节点
  • 【Kubernetes】【十一】Pod详解 Pod的生命周期
  • Connext DDS录制服务 Recording Service(1)
  • vTESTstudio - VT System CAPL Functions - VT2004(续2)
  • 每天一个linux命令---awk
  • Open3D 点云旋转之轴角式(Python版本)
  • Error: Timeout trying to fetch resolutions from npm
  • Python基础3
  • 高可用集群(HAC)