【每日算法Day 102】美团 AI 平台算法工程师面试编程题

简介: 牛牛有 n 堆石子堆,第 i 堆一共有 a[i] 个石子。牛牛可以对任意一堆石子数量大于 1 的石子堆进行分裂操作,分裂成两堆新的石子数量都大于等于 1 的石子堆。现在牛牛需要通过分裂得到 m 堆石子,他想知道这 m 堆石子的最小值最大可以是多少?

题目描述


题目链接:

牛客网:分石子[1]

牛牛有 n 堆石子堆,第 i 堆一共有 a[i] 个石子。

牛牛可以对任意一堆石子数量大于 1 的石子堆进行分裂操作,分裂成两堆新的石子数量都大于等于 1 的石子堆。

现在牛牛需要通过分裂得到 m 堆石子,他想知道这 m 堆石子的最小值最大可以是多少?

示例:

输入:3,5,[3,5,6]输出:2解释:把5分裂成2和3把6分裂成2和4得到五堆石子[3,2,3,2,4]

备注:


image.png

  • 第一个参数 n 代表石子堆的个数
  • 第二个参数 m 表示需要得到的石子堆数。
  • 第三个参数 vector a 代表每堆石子堆的石子个数

题解


一拿到这个题目,就看出来这是一道二分答案的题目。

首先定义上下界 l = 1, r = min{a[i]} ,也就是说,每一堆个数最小值至少为 1 ,最多就是初始的时候最小的那堆个数。

然后对于 mid = (l + r) / 2 ,含义就是假设最终最小的那堆有 mid 个。我们求出初始时每一堆最多可以划分出多少个数全部大于等于 mid 的子堆,显然个数是 a[i] / mid 取整,记总堆数为 cnt

如果 cnt < m ,那么说明 mid 太大了,你最多也不可能划分成 m 堆,所以更新 r = mid - 1 。如果 cnt > m ,那么说明 mid 太小了,你能划分的堆数大于了 m ,那么更新 l = mid + 1 。最后如果 cnt = m ,你就暂存一下答案,因为这时的 mid 是有可能成为最终答案的。但是 mid 还是可能太小了,因为 mid 稍微大一点 cnt 是不会变的,所以继续更新 l = mid + 1

最终返回暂存的答案 res 即可。注意这题的二分框架和之前做过的有所不同,在等号判断上得特别小心,我一开始没想清楚,错了好多次才通过的。

代码



classSolution {public: 
/**     * 分石子     * @param n int整型      * @param m long长整型   * @param a int整型vector* @return int整型   */intsolve(intn, longlongm, vector<int>&a) {        typedeflonglongll;    
lll=1, r=*min_element(a.begin(), a.end()), res=0; 
while (l<=r) {      
llmid=l+ (r-l) /2;    
llcnt=0;        
for (autox : a) {         
cnt+=x/mid;   
                                                                         }            if (cnt<m) r=mid-1;  
else {           
l=mid+1;    
res=mid;      
                                                                         }       
                                                                     }  
returnres; 
                                                                    }
               };

参考资料


[1]

牛客网:分石子: https://www.nowcoder.com/questionTerminal/1ea5b4eaeff841a4918931791b000756


image.png

作者简介:godweiyang知乎同名华东师范大学计算机系硕士在读,方向自然语言处理与深度学习喜欢与人分享技术与知识,期待与你的进一步交流~


相关文章
|
13天前
|
传感器 人工智能 监控
智慧电厂AI算法方案
智慧电厂AI算法方案通过深度学习和机器学习技术,实现设备故障预测、发电运行优化、安全监控和环保管理。方案涵盖平台层、展现层、应用层和基础层,具备精准诊断、智能优化、全方位监控等优势,助力电厂提升效率、降低成本、保障安全和环保合规。
智慧电厂AI算法方案
|
9天前
|
机器学习/深度学习 传感器 人工智能
智慧无人机AI算法方案
智慧无人机AI算法方案通过集成先进的AI技术和多传感器融合,实现了无人机的自主飞行、智能避障、高效数据处理及多机协同作业,显著提升了无人机在复杂环境下的作业能力和安全性。该方案广泛应用于航拍测绘、巡检监测、应急救援和物流配送等领域,能够有效降低人工成本,提高任务执行效率和数据处理速度。
智慧无人机AI算法方案
|
27天前
|
SQL 缓存 关系型数据库
美团面试:Mysql 有几级缓存? 每一级缓存,具体是什么?
在40岁老架构师尼恩的读者交流群中,近期有小伙伴因未能系统梳理MySQL缓存机制而在美团面试中失利。为此,尼恩对MySQL的缓存机制进行了系统化梳理,包括一级缓存(InnoDB缓存)和二级缓存(查询缓存)。同时,他还将这些知识点整理进《尼恩Java面试宝典PDF》V175版本,帮助大家提升技术水平,顺利通过面试。更多技术资料请关注公号【技术自由圈】。
美团面试:Mysql 有几级缓存? 每一级缓存,具体是什么?
|
13天前
|
传感器 人工智能 监控
智慧化工厂AI算法方案
智慧化工厂AI算法方案针对化工行业生产过程中的安全风险、效率瓶颈、环保压力和数据管理不足等问题,通过深度学习、大数据分析等技术,实现生产过程的实时监控与优化、设备故障预测与维护、安全预警与应急响应、环保监测与治理优化,全面提升工厂的智能化水平和管理效能。
智慧化工厂AI算法方案
|
18天前
|
算法 Python
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果;贪心算法在每一步选择局部最优解,追求全局最优;动态规划通过保存子问题的解,避免重复计算,确保全局最优。这三种算法各具特色,适用于不同类型的问题,合理选择能显著提升编程效率。
32 2
|
18天前
|
人工智能 自然语言处理 IDE
通义灵码让AI帮你实现自动化编程
通义灵码是由阿里云与通义实验室联合开发的智能编码辅助工具,具备行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答及异常报错排查等功能。该工具支持200多种编程语言,兼容主流IDE,如Visual Studio Code、Visual Studio和JetBrains IDEs。通义灵码在Gartner发布的AI代码助手魔力象限中表现出色,成为唯一进入挑战者象限的中国科技公司。目前,通义灵码下载量已超过470万,每日辅助生成代码超3000万次,被开发者广泛采用。
|
24天前
|
存储 人工智能 文字识别
利用AI能力平台实现档案馆纸质文件的智能化数字处理
在传统档案馆中,纸质文件管理面临诸多挑战。AI能力平台利用OCR技术,通过图像扫描、预处理、边界检测、文字与图片分离、文字识别及结果存储等步骤,实现高效数字化转型,大幅提升档案处理效率和准确性。
|
22天前
|
机器学习/深度学习 人工智能 自然语言处理
探索AI驱动的个性化学习平台构建###
【10月更文挑战第29天】 本文将深入探讨如何利用人工智能技术,特别是机器学习与大数据分析,构建一个能够提供高度个性化学习体验的在线平台。我们将分析当前在线教育的挑战,提出通过智能算法实现内容定制、学习路径优化及实时反馈机制的技术方案,以期为不同背景和需求的学习者创造更加高效、互动的学习环境。 ###
49 3
|
23天前
|
机器学习/深度学习 人工智能 自然语言处理
医疗行业的语音识别技术解析:AI多模态能力平台的应用与架构
AI多模态能力平台通过语音识别技术,实现实时转录医患对话,自动生成结构化数据,提高医疗效率。平台具备强大的环境降噪、语音分离及自然语言处理能力,支持与医院系统无缝集成,广泛应用于门诊记录、多学科会诊和急诊场景,显著提升工作效率和数据准确性。
|
1月前
|
SQL 人工智能 DataWorks
DataWorks:新一代 Data+AI 数据开发与数据治理平台演进
本文介绍了阿里云 DataWorks 在 DA 数智大会 2024 上的最新进展,包括新一代智能数据开发平台 DataWorks Data Studio、全新升级的 DataWorks Copilot 智能助手、数据资产治理、全面云原生转型以及更开放的开发者体验。这些更新旨在提升数据开发和治理的效率,助力企业实现数据价值最大化和智能化转型。
231 5

热门文章

最新文章

下一篇
无影云桌面