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

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

今天去尝试了一下美团 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;
    }
};
相关文章
|
4天前
|
算法 Java 调度
《面试专题-----经典高频面试题收集四》解锁 Java 面试的关键:深度解析并发编程进阶篇高频经典面试题(第四篇)
《面试专题-----经典高频面试题收集四》解锁 Java 面试的关键:深度解析并发编程进阶篇高频经典面试题(第四篇)
9 0
|
4天前
|
机器学习/深度学习 人工智能 自然语言处理
算法金 | 没有思考过 Embedding,不足以谈 AI
**摘要:** 本文深入探讨了人工智能中的Embedding技术,解释了它是如何将高维数据映射到低维向量空间以简化处理和捕获内在关系的。文章介绍了词向量、图像嵌入和用户嵌入等常见类型的Embedding,并强调了其在自然语言处理、计算机视觉和推荐系统中的应用。此外,还讨论了Embedding的数学基础,如向量空间和线性代数,并提到了Word2Vec、GloVe和BERT等经典模型。最后,文章涵盖了如何选择合适的Embedding技术,以及在资源有限时的考虑因素。通过理解Embedding,读者能够更好地掌握AI的精髓。
6 0
算法金 | 没有思考过 Embedding,不足以谈 AI
|
5天前
|
安全 Java API
《面试专题-----经典高频面试题收集三》解锁 Java 面试的关键:深度解析并发编程基础篇高频经典面试题(第三篇)
《面试专题-----经典高频面试题收集三》解锁 Java 面试的关键:深度解析并发编程基础篇高频经典面试题(第三篇)
9 0
|
7天前
|
人工智能 自然语言处理 搜索推荐
如何通过AI提升淘客返利平台的用户体验
如何通过AI提升淘客返利平台的用户体验
|
8天前
|
机器学习/深度学习 人工智能 自然语言处理
AI大模型的核心成功因素通常可以归结为三大要素:大数据、大算力和强算法。
AI大模型的核心成功因素通常可以归结为三大要素:大数据、大算力和强算法。
24 0
|
10天前
|
机器学习/深度学习 人工智能 Dart
AI - 机器学习GBDT算法
梯度提升决策树(Gradient Boosting Decision Tree),是一种集成学习的算法,它通过构建多个决策树来逐步修正之前模型的错误,从而提升模型整体的预测性能。
|
10天前
|
机器学习/深度学习 人工智能 编解码
AI - 支持向量机算法
**支持向量机(SVM)**是一种用于二分类的强大学习算法,寻找最佳超平面以最大化类别间间隔。对于线性可分数据,SVM通过硬间隔最大化找到线性分类器;非线性数据则通过核技巧映射到高维空间,成为非线性分类器。SVM利用软间隔处理异常或线性不可分情况,并通过惩罚参数C平衡间隔和误分类。损失函数常采用合页损失,鸢尾花数据集常用于SVM的示例实验。
|
12天前
|
人工智能 自然语言处理 Java
Spring AI是一个开源的多模态AI模型平台
Spring AI是一个开源的多模态AI模型平台
200 2
|
14天前
|
机器学习/深度学习 人工智能 搜索推荐
详细探讨AI在个性化教育平台中学习路径推荐的应用
详细探讨AI在个性化教育平台中学习路径推荐的应用
|
15天前
|
人工智能 自然语言处理 Java
Spring AI开源的多模态AI模型平台
Spring AI开源的多模态AI模型平台
67 0