美团 · 二分 · 算法编程题
美团 二分 时限 1 秒 / 256 MB

题目描述

请帮助小美实现一个朴素贝叶斯(Multinomial NB)二分类器,在给定训练集后对测试集输出标签。
小美设计的算法步骤如下:
1. 输入读取
• train 字段:二维列表,每行最后一列 y ∈ {0,1},其余列为非负整数词频
• test 字段:二维列表,仅含词频特征(维度与训练一致)
2. 平滑:使用拉普拉斯平滑 k = 1
P(w c)=n_c,w+1Σ_w’(n_c,w’+1) , n_c,w 表示在所有训练样本中标签为 c 时第 w 个词的总频次。
3. 先验概率: _c=(N_c/N) , N_c 为类别 c 的样本数量,N 为总样本数。
4. 对数后验:对样本 x 计算
log P(c x)=log_c+Σ_w x_wlog P(w c)
5. 预测规则:若 log P(1|x) ≥ log P(0|x) 输出 1,否则 0。

输入输出

输入描述
{
"train": [[f11,…,f1m,y1], …, [fn1,…,fnm,yn]],
"test": [[t11,…,t1m], …, [tk1,…,tkm]]
}
行长度必须一致;train[i][:-1] 与 test[j] 均为非负整数词频。
输出描述
所有测试样本的预测标签(0/1)按顺序放入 JSON 数组,例如:
[0,1,0]

样例共 1 组

样例 1
输入
{"train":[[2,0,0,0],[3,1,0,0],[0,0,2,1],[0,1,3,1]],"test":[[1,0,0],[0,1,2]]}
输出
[0, 1]

算法解析依据一般

考点:二分

限制 1 秒 / 256MB | 标准输入输出

题目画像

  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

参考方向:二分

把「求最优值」转化为「判定某值是否可行」,用单调性二分逼近答案。

思路框架(二分 通法 · 非本题专属)

  1. 确认单调性:答案越大/越小,条件越容易(或越难)满足。
  2. 写出 check(x):判断值为 x 时是否可行。
  3. 在答案区间 [lo, hi] 上二分,每次取 mid 调 check,收缩区间。
  4. 边界收敛到唯一答案,注意取整方向(求最小可行值用上取整)。

实现要点:模板:while (lo < hi) { mid = (lo+hi)/2; if (check(mid)) hi = mid; else lo = mid+1; } 求最小可行值。

复杂度:时间 O(check 的代价 × log(答案范围)) | 空间 O(1)

该范式的通法易错点

  • check 函数不满足单调性却硬套二分(会得到错误答案)。
  • 二分边界或取整方向写错,陷入死循环或漏掉边界答案。
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。

样例

样例 1

  • 输入:{"train":[[2,0,0,0],[3,1,0,0],[0,0,2,1],[0,1,3,1]],"test":[[1,0,0],[0,1,2]]}
  • 输出:[0, 1]

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:2026年春招-美团-算法策略岗-第一批笔试。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解