[转载] 我喜欢的一道软件工程面试题:计算中位数


原文出处: https://krisshamloo.com/blog/007
作者: Kris Shamloo
原文发布日期: 2026-05-03
许可协议: 本文为原文的中文翻译,所有权利归原文作者所有。


我喜欢的一道软件工程面试题:计算中位数

我手头攒了不少题目,用来在技术面试中考察候选人。它们的风格都比较相似。我不问脑筋急转弯式的题目——我觉得那种题价值很低。相反,我倾向于问一些看似直白、却能从几个不同角度深入探讨的题目。

这就引出了不起眼的「中位数」。

写一个函数,接收一个数字数组,返回它的中位数。

下面是一个带讨论注释的 Python 实现。

def median(numbers: list[float]) -> float:
    # 如果列表是空的,我们该怎么办?
    # 抛异常?还是返回一个哨兵值?
    if not numbers:
        raise ValueError("median called with empty list")

    # Python 是按引用传递的,那么使用 sorted()
    # 还是 numbers.sort() 各有什么影响?
    numbers = sorted(numbers)
    length = len(numbers)
    mid = length // 2

    # 高质量的候选人会勇敢地引入 1000 个依赖,
    # 只为拿到一个判断偶数的 is_even 库函数。
    if length % 2 == 0:
        return (numbers[mid - 1] + numbers[mid]) / 2.0
    else:
        return numbers[mid]