美团 · 模拟 · 算法编程题
美团 模拟 时限 3 秒 / 256 MB

题目描述

请你在仅使用 numpy / pandas的前提下,手写实现高斯朴素贝叶斯(Gaussian Naive Bayes,GNB),并对给定测试样本输出类别预测。具体流程:
1. 读取数据
• train 字段:二维列表,每行最后一列为类别标签 y∈{0,1},其余为数值特征
• test 字段:二维列表,仅包含与训练集同维度的特征
2. 参数估计
• 对每个类别 c 计算先验 _c = (N_c/N)
• 对每个特征计算类条件独立假设下的 均值 _cj 与 方差 _cj^2 (总体方差 ddof=0;若方差为 0,令 _cj^2 = 1e-9 )
3. 预测
• 使用对数后验:
log P(c x)=log_c+Σ_j [-12log(2_cj^2) -(x_j-_cj)^22_cj^2]
• 取 _c log P(c x) 作为预测标签
4. 结果输出
• 预测值保留整数 0/1,以 JSON 数组形式一次性输出,顺序与输入 test 保持一致

输入输出

输入描述
标准输入为 一行 JSON:
• n 行训练样本,m 维特征,最后一列为标签
• 所有值均为浮点数 / 整数,无额外空行
输出描述
标准输出仅含一行:即测试集中每个样本的预测标签(整数),使用单行 JSON 数组表示。

样例共 1 组

样例 1
输入
{"train": [[1,1,0],[1.1,0.9,0],[4,4,1],[4.2,3.8,1]], "test": [[1,1],[4,4]]}
输出
[0, 1]

算法解析依据充分

考点:模拟

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

题目画像

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

解题思路

推荐方向:模拟

本题切入点

按给定流程实现高斯朴素贝叶斯:类别先验 + 类条件均值/方差(ddof=0,方差为 0 时置 1e-9),用对数后验避免下溢,最后取后验最大的类别。

不涉及复杂算法,把题目描述的流程原样翻译成代码逐步执行即可。

思路框架(模拟 通法 · 非本题专属)

  1. 用变量记录题目要求的「状态」(当前值、剩余数量、当前位置等)。
  2. 按题面给出的顺序,把每一步操作写成一段代码,逐条执行。
  3. 每一步执行后更新状态,并在题目要求的位置输出或累计答案。
  4. 注意循环的边界:执行多少次、何时终止、是否能终止。

实现要点:结构上通常是一个外层循环包住若干 if/else 分支;只要状态定义清楚,正确率很高。

复杂度:时间 O(操作次数) | 空间 O(状态数)

该范式的通法易错点

  • 终止条件写错导致死循环或漏做最后一次操作。
  • 状态更新顺序颠倒(先改了下标又用旧下标)。
  • 题目里「最多 / 恰好 / 至少」的语义差别没区分。

样例

样例 1

  • 输入:{"train": [[1,1,0],[1.1,0.9,0],[4,4,1],[4.2,3.8,1]], "test": [[1,1],[4,4]]}
  • 输出:[0, 1]

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

本题来源:2025年秋招-美团-算法策略端-第二批笔试。

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