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

leetcode 1792. 最大平均通过率

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

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

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

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

示例 1:

输入:classes = [[1,2],[3,5],[2,2]], extraStudents = 2
输出:0.78333
解释:你可以将额外的两个学生都安排到第一个班级,平均通过率为 (3/4 + 3/5 + 2/2) / 3 = 0.78333 。
示例 2:

输入:classes = [[2,4],[3,9],[4,5],[2,10]], extraStudents = 4
输出:0.53485
 

提示:

1 <= classes.length <= 105
classes[i].length == 2
1 <= passi <= totali <= 105
1 <= extraStudents <= 105


来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/maximum-average-pass-ratio
 

 * @param {number[][]} classes* @param {number} extraStudents* @return {number}*/
var maxAverageRatio = function (classes, extraStudents) {const heap = new PriorityQueue({compare: (a, b) => {let val1 = (b[1] + 1) * b[1] * (a[1] - a[0]);let val2 = (a[1] + 1) * a[1] * (b[1] - b[0]);if (val1 == val2) {return 0;}return val1 < val2 ? 1 : -1}})classes.forEach(([pass, total]) => {heap.enqueue([pass, total])})while (extraStudents--) {const [pass, total] = heap.dequeue()heap.enqueue([pass + 1, total + 1])}let ans = 0while (heap.front()) {const [pass, total] = heap.dequeue()ans += Number(pass / total)}return ans / classes.length
};
使用指南可以看这个:
@datastructures-js/priority-queue作者:hai-jia-er-shan-de-luo-ri
链接:https://leetcode.cn/problems/maximum-average-pass-ratio/solution/javascriptyou-xian-dui-lie-ke-yi-shi-yon-1wkq/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

http://www.lryc.cn/news/12678.html

相关文章:

  • 15-基础加强-2-xml(约束)枚举注解
  • 13:高级篇 - CTK 事件管理机制(signal/slot)
  • 群晖-第1章-IPV6的DDNS
  • centos7系统-kubeadm安装k8s集群(v1.26版本)亲测有效,解决各种坑可供参考
  • 帮助指令 man ,help及文档常用管理指令
  • 电子科技大学操作系统期末复习笔记(五):文件管理
  • SpringBoot+ActiveMQ-发布订阅模式(生产端)
  • Android实例仿真之三
  • 关于MySQL的limit优化
  • Java-Stream流基本使用
  • Liunx(狂神课堂笔记)
  • 【史上最全面esp32教程】点灯大师篇
  • 【Java 面试合集】内存中为什么要区分栈和堆
  • 【NLP实战】Python字符串处理
  • 17.CSS伪类
  • 数据链路层
  • 投票需要什么流程微信投票互助平台的免费投票平台搭建
  • 数据结构——算法的时间复杂度
  • Go基础-类型
  • 良许翻天覆地的2022年
  • node+vue微信小程序的社区后勤报修系统
  • WSL(Windows Subsystem for Linux)
  • 华为OD机试题 - 单词反转(JavaScript)
  • 人工智能原理复习 | 产生式系统的搜索策略
  • 初始C语言 - 数组(一维数组、二维数组、数组越界、数组传参)
  • 人工智能原理复习 | 可分解产生式系统的搜索策略
  • 线段树(维护区间信息)
  • C语言 基于Ncurse库的贪吃蛇游戏项目
  • 【Java基础】Java语言特性
  • python进阶--Numyp库(一)