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

LeetCode每日一题,2025-09-01

计算大型浮点数相除的时候不要通分,会导致浮点数误差
最大平均通过率

原始想法是把增益公式通分:

x+1y+1−xy通分后y−xy2+y=y−xy(y+1)\frac{x+1}{y+1} - \frac{x}{y} \quad \text{通分后} \quad \frac{y - x}{y^2 + y} = \frac{y-x}{y(y+1)} y+1x+1yx通分后y2+yyx=y(y+1)yx

但是在 Java 中可能出错,因为:

  • y2+yy^2 + yy2+y 非常大,而 y−xy - xyx 相对较小,做浮点数除法可能产生精度误差;
  • 浮点数精度误差累积会导致答案不准确。

所以推荐直接使用原公式:

增益=x+1y+1−xy\boxed{\text{增益} = \frac{x+1}{y+1} - \frac{x}{y}} 增益=y+1x+1yx

这个公式在浮点运算中更稳定,不会因为通分导致精度丢失。

    class Node implements Comparable<Node> {double k, x, y;public Node(double k, double x, double y) {this.k = k;this.x = x;this.y = y;}// 定义比较规则:按照 k 降序(大根堆)@Overridepublic int compareTo(Node other) {return Double.compare(other.k, this.k); // k 降序}}public double maxAverageRatio(int[][] classes, int extraStudents) {PriorityQueue<Node> maxHeap = new PriorityQueue<>();for (int[] classInfo : classes) {double k = (classInfo[0] + 1) /(double) (classInfo[1] + 1 )  - (classInfo[0] / (double) classInfo[1]);maxHeap.offer(new Node(k, classInfo[0], classInfo[1]));}while (extraStudents-- > 0 && !maxHeap.isEmpty()) {var cur = maxHeap.poll();cur.x += 1;cur.y += 1;cur.k = (cur.x + 1) / (cur.y + 1) - cur.x / cur.y;maxHeap.offer(cur);//            System.out.println(cur.k + " " + cur.x + " " + cur.y);}double ans = 0;while (!maxHeap.isEmpty()) {var cur = maxHeap.poll();ans += cur.x / cur.y;}return ans / classes.length;}
http://www.dtcms.com/a/361010.html

相关文章:

  • 视频提取文字用什么软件好?分享6款免费的视频转文字软件!
  • vizard-将长视频变成适合社交的短视频AI工具
  • (3dnr)多帧视频图像去噪 (二)
  • 统计学的“尝汤原理”:用生活案例彻底理解中心极限定理
  • Linux初始——Vim
  • 前端静态资源缓存与部署实践总结
  • 云手机为什么会受到广泛关注?
  • 【算法基础】链表
  • (Arxiv-2025)VACE:一体化视频创作与编辑
  • uniApp App 嵌入 H5 全流程:通信与跳转细节拆解
  • 【菜狗学聚类】聚类的一些评估指标——20250901
  • 交互体验升级:Three.js在设备孪生体中的实时数据响应方案
  • 飞牛nas修改crontab计划默认编辑器
  • RPA背后的核心技术有哪些?
  • 【论文阅读】Sparse4D v3:Advancing End-to-End 3D Detection and Tracking
  • 基于Hadoop与层次聚类技术的电子游戏销售分析系统的设计与实现
  • wpf之WrapPanel
  • 了解软件测试之软件测试技能
  • 第六章:健壮Go应用:工程实践与生产就绪之测试
  • Spring Bean生命周期的完全指南
  • 警告:OPENCV_FFMPEG_READ_ATTEMPTS (current value is 4096)
  • Altium Designer中的Net-Tie:解决多网络合并与电气隔离的利器
  • Spring中bean的作用域
  • [Godot] C#使用Json进行数据结构的保存与加载
  • QT中的TCP
  • 摄像头模块的电子集成设计
  • 开发使用mybatis是用混合模式还是全注解模式
  • pprint:美观打印数据结构
  • Spring Boot 和 Spring Cloud 的原理和区别
  • Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程