ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

RoundPrices取整难题精讲:airbnb题库中贪心策略的完整解法

RoundPrices取整难题精讲:airbnb题库中贪心策略的完整解法 RoundPrices取整难题精讲airbnb题库中贪心策略的完整解法【免费下载链接】airbnb项目地址: https://gitcode.com/gh_mirrors/ai/airbnbRoundPrices价格取整是 airbnb 面试题库gh_mirrors/ai/airbnb中的一道经典算法题把一组带小数的房价取整后还要保证取整结果的总和等于总和的取整。本文带你完整拆解这道题背后的贪心策略以及题库中两套解法的实现思路。1. RoundPrices取整问题是什么题目场景很贴近现实Airbnb 上每个房源的房价都是带小数的价格比如 3.7 美元财务要求把每个价格都取成整数但所有价格取整后的总和必须等于原总和四舍五入后的值。用一个例子说明原始价格1.22.33.4原总和6.9 → 取整为7❌ 各自四舍五入123取整后总和6 ≠ 7单独取整会让总和少 1这就是难题所在必须在多个数之间重新分配取整误差。2. 为什么各自先四舍五入一定会失败四舍五入是局部最优每个数各自选最近的整数但合起来总和却可能偏离目标值 1 甚至更多。每个数最多差 0.5n 个数累积误差最多可达 n/2题目强制要求总和精确等于round(总和)因此必须有一个全局调整机制。这正是贪心算法的用武之地把需要补上或减去的 1分配给调整代价最小的数。3. 贪心解法一先全向下取整按最小代价分配向上取整名额题库中第一套解法Solution的思路源码RoundPrices.java全部向下取整floor记下整数部分之和floorSum计算需要向上取整的名额diff round(总和) - floorSum对每个数计算向上取整的代价即它到天花板的距离ceil - 原值贪心选择把diff个名额优先分配给代价最小的数离天花板最近的最先被取整上去其余保持向下取整。以{1.2, 3.7, 2.3, 4.8}为例原值向下取整到天花板的距离处理4.840.2✅ 向上取整 → 53.730.3✅ 向上取整 → 42.320.7保持 21.210.8保持 1floorSum 10round(12.0) 12diff 2取代价最小的 2 个数向上取整得到总和恰好为 12。按代价升序输出结果为[5, 4, 2, 1]。⚠️ 注意该解法按取整代价重排了输出顺序不保持输入原顺序面试中需要主动向考官说明这一点。4. 贪心解法二先四舍五入按小数部分调整第二套解法Solution_2源码RoundPrices.java更符合日常习惯且保持输入顺序每个数先按常规四舍五入得到初始结果与总和roundSum若roundSum round(总和)把最该进位的数小数部分最大的、且原本被舍去的数改成向上取整补齐差额若roundSum round(总和)把最不该进位的数小数部分最小的、且原本被进位的数改回向下取整抵消差额两者相等则直接返回。仍以{1.2, 3.7, 2.3, 4.8}验证各自四舍五入得1425 12恰好等于round(12.0)直接返回[1, 4, 2, 5]。两种贪心视角对比对比项解法一floor 分配名额解法二round 小数调整贪心依据到天花板距离最小小数部分最冤枉输出顺序重排保持原序 ✅实现复杂度低中需处理双向调整面试推荐快速说清思路工程上更实用5. 复杂度分析与边界情况时间复杂度排序主导O(n log n)空间复杂度O(n)用于保存每个数的辅助信息取值 小数部分/取整代价 下标。题库单元测试RoundPrices.java覆盖了这些边界值得留意边界场景示例要点负数-0.4向下取整要取到-1方向floor/ceil语义不能混淆整数价格4.0小数部分为 0不参与调整差额为 0各数取整和已吻合解法二直接短路返回6. 源码位置与本地运行相关模块路径取整难题源码含两套解法与单元测试src/main/java/round_prices/RoundPrices.java题库题目清单与说明README.md公共工具类其他题目共用src/main/java/common/项目基于 Gradle 构建测试使用 JUnit。本地克隆后执行即可运行 RoundPrices 的全部测试用例git clone https://gitcode.com/gh_mirrors/ai/airbnb cd airbnb ./gradlew test7. 总结RoundPrices 取整题考察的核心不是取整本身而是误差的贪心分配先算出全局差额目标总和 - 初始取整总和按代价从小到大或小数部分从大到小逐个补齐差额注意负数、整数等边界并注意是否要保持输入顺序。掌握这个先取整、再按最小代价调整的贪心模板类似的公平取整、预算分配、投票配额类问题都能快速迁移解决。【免费下载链接】airbnb项目地址: https://gitcode.com/gh_mirrors/ai/airbnb创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表