今天去尝试了一下美团 AI 平台,两次面试连一起。但是两位面试官小哥都是做推荐的,我们互相都不了解对方怎么做的。于是乎就做算法题,讲论文(把不懂的人讲懂确实困难),然后全程小哥给我介绍他们部门情况,我就挂机听着。不管这家拿不拿得到,就当刷刷经验吧,也挺不错的。一共三道题目,前两道一个最长上升子序列,一道快速排序,就不讲了,都是原题。

题目描述

题目链接:
牛客网:分石子[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]

备注:

  • 第一个参数 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 即可。注意这题的二分框架和之前做过的有所不同,在等号判断上得特别小心,我一开始没想清楚,错了好多次才通过的。

代码

        class Solution {public:/**
     * 分石子
     * @param n int整型
     * @param m long长整型
     * @param a int整型vector
     * @return int整型
     */int solve(int n, long long m, vector<int>& a) {typedef long long ll;ll l = 1, r = *min_element(a.begin(), a.end()), res = 0;while (l <= r) {ll mid = l + (r - l) / 2;ll cnt = 0;for (auto x : a) {cnt += x / mid;}if (cnt < m) r = mid - 1;else {l = mid + 1;res = mid;}}return res;}
};

参考资料

[1]

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

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

  1. 面试美团,完全实况30+面试真题与答案公布。不得不说细节拉满想要拿到一个大厂offer还真不容易。

    面试美团,完全实况30+面试真题与答案公布.不得不说细节拉满想要拿到一个大厂offer还真不容易. 叮.....美团来电.这次不是外卖而是电话面试. Java 后端开发的. 如果你问我,看了这些题就完 ...

  2. 美团点评2017秋招笔试编程题

    美团点评2017秋招笔试编程题 1, 大富翁游戏,玩家根据骰子的点数决定走的步数,即骰子点数为1时可以走一步,点数为2时可以走两步,点数为n时可以走n步.求玩家走到第n步(n<=骰子最大点数且是 ...

  3. 美团AI平台部一面面经(NLP岗位)

    AI平台部的一个搜索部 做查询,地址识别,实体识别,意图识别,用Bert很多,还有就是RNN网络 问项目,两个算法类项目都问了 问C++,java,python的语言方面 C++: 构造函数的种类,S ...

  4. 人工智能的算法有哪些?AI常用算法

    人工智能(AI)是一个非常广泛的领域,其中包含许多不同的算法和技术.以下是一些常见的人工智能算法: 人工智能的算法有哪些? 机器学习(Machine Learning):机器学习是人工智能领域的一个重 ...

  5. 2015年阿里、网易、中兴、华为、美团等Java研发工程师面试心得

    一.阿里内推 阿里2015年缩招,我走的是内推路线,大概8月份开始内推,建议大家找认识的熟悉的人内推,因为如果进了面试,内推的人是可以通过内部系统看到你当前的面试是否通过,而不用像面试官说的那样:&q ...

  6. C语言五子棋禁手算法的编写,五子棋 AI(AIpha-beta算法)

    博弈树 下过五子棋的人都应该知道,越厉害的人,对棋面的预测程度越深.换句话讲,就是当你下完一步棋,我就能在我的脑海里假设把我所有可能下的地方都下一遍,然后考虑我下完之后你又会下在哪里,最后我根据每次预 ...

  7. 阿里算法工程师在线编程题

    第一次投实习,阿里的在线编程题,只有一道,半个小时完成. 这道题主要要想到有递推公式 当N>=3时A(N)=M*(M-1)^(N-1)-A(N-1) N=2时,初值为M(M-1),因为只有两块, ...

  8. 字节跳动2018算法工程师校招编程题题解(第二批)

    编程题1 题目大意 为了不断优化推荐效果,今日头条每天要存储和处理海量数据.假设有这样一种场景:我们对用户按照它们的注册时间先后来标号,对于一类文章,每个用户都有不同的喜好值,我们会想知道某一段时间内 ...

  9. 美团 测开|测试开发 面试真题|面经 汇总

    美团测开一面 时长:1小时 介绍一下项目 说一下为什么选择测开 项目中用到的ES说一下 你项目实现过程中有没有遇到什么问题? 微信朋友圈的功能性测试,要从那些方面考虑 测试的一般流程 linux用的多 ...

  10. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 7丨字节面试真题【难度困难】

      活动介绍: 「数据仓库技术交流群」已经正式启动每日SQL打卡,帮助大家扎实基础,努力工作之余,别忘了自我提升. 欢迎报名和邀请小伙伴参与,一个人可能走得很快,但一群人会走得很远.

最新文章

  1. LevelDb系列之简介
  2. Git学习笔记——分支
  3. Web前端与HTML5有什么区别,百分之八十的人分不清
  4. python 文件修改记录_python基础-文件增删改查
  5. Python编程之求100以内的素数
  6. 使用devcon禁用启用网卡
  7. 为什么 PSP22 对 Polkadot 生态系统很重要
  8. usb转rj45 android,USB转RJ45驱动合集
  9. 科普数据迁移技术和方法论
  10. wps目录怎么加一条_WPS中如何正确插入目录_WPS怎么做目录
  11. Python小白的数学建模课-19.网络流优化问题
  12. Ubuntu系统自动锁屏怎么办
  13. Apache Tez
  14. Win7安装Ubuntu1804双系统
  15. Symantec Backup Exec 报Access denied to directory xxx Error Code E0008488
  16. CSS学习(三)—— 浮动与定位
  17. Docker compose ERROR: for resources Cannot start service xxd: network not found
  18. MATLAB 基础笔记(一):数组的生成
  19. 兼职python程序员_《兼》字意思读音、组词解释及笔画数 - 新华字典 - 911查询
  20. R语言入门——你不知到的哪些黑科技(这里面的函数你用过一个算我输)

热门文章

  1. 重载运算符operator
  2. 写了一个对象集合排序的类
  3. 趣图图解 SOLID 软件开发原则
  4. css3的新属性 新增的颜色--- 透明度---两种渐变---定义多张背景图--background-size...
  5. 利用Python进行数据分析——Ipython
  6. bzoj5194: [Usaco2018 Feb]Snow Boots
  7. 三组划分//巧妙填数
  8. scrapy_全站爬取
  9. Java Hex 16进制的 byte String 转换类
  10. HDU-3729 I'm Telling the Truth