1. 米哈游笔试真题解析:三道算法题的解题思路与实现
最近参加了米哈游的笔试,题目质量相当高,尤其是第三题很有区分度。作为过来人,我把自己对这三道题的解题思路和实现方法整理出来,希望能帮助到正在准备面试的朋友们。这三道题分别考察了哈希统计、贪心算法和树上前缀异或的应用,都是非常经典的算法题型。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 题目一:展墙与橱窗配对问题解析
2.1 问题本质与建模
这道题表面上是关于展馆布置的问题,实际上是一个典型的统计匹配问题。题目大意是给定一个矩阵,我们需要判断行和与列和能否完美配对。关键在于理解:配对只与行和列的总和数值有关,而与矩阵内部的具体分布无关。
举个例子,假设我们有以下3x3矩阵:
code复制1 2 3
4 5 6
7 8 9
行和分别是6、15、24,列和分别是12、15、18。我们需要找出行和与列和中相等的数值对。
2.2 解题思路与算法设计
解决这个问题的核心思路可以分为三步:
- 计算所有行和(row_sums)和列和(col_sums)
- 统计行和和列和中每个数值出现的频率
- 对于每个数值,取行和和列和中出现次数的较小值,累加得到最终答案
具体实现时,我们可以使用哈希表(在Python中是字典)来高效地统计频率。以下是Python实现的关键代码:
python复制def count_matching_pairs(matrix):
if not matrix or not matrix[0]:
return 0
# 计算行和
row_sums = [sum(row) for row in matrix]
# 计算列和
col_sums = [0] * len(matrix[0])
for row in matrix:
for j in range(len(row)):
col_sums[j] += row[j]
# 统计频率
row_counts = {}
for s in row_sums:
row_counts[s] = row_counts.get(s, 0) + 1
col_counts =
