目录
正在加载目录...

Snowflake OA 面试真题:贪心、模拟与动态规划

最近整理了三道Snowflake OA,平台是 HackerRank,一共 3 道编程题,限时 120 分钟。整体难度中等偏上,考的东西不算冷门:贪心、树、数组模拟、DP,再加上离散化和二分。

难点不在算法本身,而在数据范围。有些题直接按题意模拟就能做,但数据一大就会超时,所以得先想清楚每次操作到底影响了什么,再决定怎么实现。

第一题:最小化树的高度(Minimum Height)

Snowflake OA 面试真题:贪心、模拟与动态规划

给定一棵有根树,表示一个包含 tree_nodes 张表的数据库,其中 表 1 是根节点。最多允许执行 max_operations 次操作。每次操作可以执行以下步骤:

  • 选择一条连接父节点 v 和其子节点 u 的边,并删除这条边 (u, v)。
  • 将节点 u 及其整棵子树移动到根节点下,使 u 成为根节点的直接子节点,从而降低该节点及其子树的深度。

请确定经过最多 max_operations 次操作后,树可能达到的最小高度。

注意事项

  • 树的高度(Height):树中所有节点的最大深度。
  • 节点的深度(Depth):从根节点到该节点所经过的边数。
  • 子树(Subtree):有根树中的一个子图,包含某个节点、该节点的所有后代,以及连接这些后代的所有相关边。

解题思路

采用贪心策略。每次操作优先将最深的子树直接连接到根节点,这样可以尽可能降低树的高度。首先计算所有节点的深度,并按深度从大到小排序。每次选择最深的节点,将其子树切下来并挂到根节点下,直到用完操作次数。最后,剩余节点的最大深度就是答案。

第二题:水平 Pod 自动伸缩器(Horizontal Pod Autoscaler)

Snowflake OA 面试真题:贪心、模拟与动态规划

开发人员正在优化微服务的水平 Pod 自动伸缩器(Horizontal Pod Autoscaler)。系统中有 n 个微服务,第 i 个微服务当前的 Pod 数量为 pods[i]。根据流量变化,每个微服务的 Pod 数量可以增加或减少。此外,在预计流量较大的特定时刻,所有 Pod 数量小于 x 的微服务都会将 Pod 数量调整为 x。系统有一份包含 m 条记录的事件日志,使用二维数组 logs 表示,其中 logs[i] 是一个长度为 3 的整数数组。每条日志有以下两种含义:

  • [1, p, x]:将第 p 个微服务的 Pod 数量修改为 x,其中 1 ≤ p ≤ n。
  • [2, -1, x]:将所有 Pod 数量小于 x 的微服务,其 Pod 数量统一调整为 x。

你的任务是按照日志给出的顺序处理所有事件,并返回处理完成后每个微服务的 Pod 数量。

解题思路

采用模拟 + 优化的思路。遇到修改单个服务的日志 [1, p, x],直接将数组中对应位置的值改为 x;遇到全局提升的日志 [2, -1, x],不需要遍历数组逐个修改,只需用 global_min 记录当前的全局最小值。最后输出时,每个服务的最终 Pod 数量取 max(当前值, global_min) 即可,从而避免重复遍历数组,提高效率。

第三题:最大订单量(Maximum Order Volume)

Snowflake OA 面试真题:贪心、模拟与动态规划

一家超市将接到一系列电话,每通电话的开始时间、持续时间和订单量均已知。超市同一时间只能接听一通电话,未被接听的来电者不会再次拨打。请确定应该接听哪些电话,使订单总量最大化。

解题思路

给你 n个事件,每个事件开始于 start[i],持续 dur[i],会获得 vol[i] 的收益。同一时间只能进行一件事情,问最大可能的收益。我们考虑 DP,dp[i] 表示时间到达 i 时可能获得的最大收益。我们只需要考虑每个事件的末尾位置,那么状态转移就是 dp[i] = max(dp[i], dp[i - dur[i]] + vol[i]),然后当前这个位置可能的最大价值还需要往前再取一个 max,即 dp[i] = max(dp[i], dp[i - 1]),因为有可能不做这个事件。

再考虑到题目给出的时间范围很大,所以我们需要离散化,然后通过二分查找找到前一个符合条件的下标,从该位置继承最大收益就行了。

总结

这套题更看重对问题本身的分析,而不是套模板。做题时一方面要把条件读清楚,另一方面要先看数据范围,再决定能不能暴力。时间跨度很大的,想想离散化加二分;有大量批量更新的,想办法用一个标记代替逐个修改。平时刷题多留意这两类套路,遇到变形题也不容易慌。

如果你正在准备 Snowflake 或其他大厂的 OA 或面试,除了刷题,也可以结合真实面经熟悉常见题型和考察方向。InterviewShow 整理了 Microsoft、Amazon、Google、Stripe、TikTok 等科技公司的面试资料,可领取相关公司的 OA/VO 真题,帮助你了解常见考点和面试形式。我们也提供 OA 辅助和面试辅助服务,覆盖 Coding、System Design 和 BQ。你可以查看服务介绍,或直接联系我们了解详情。

FAQ

Snowflake OA 需要自己处理边界情况吗?

需要。建议检查空输入、极端数据范围、重复操作以及临界条件,尤其要确认每次操作完成后,后续操作是否会受到影响。提交前也应检查数组下标和状态转移是否正确。

Snowflake OA 写代码时应该注意什么?

除了保证结果正确,还要关注程序的运行效率。如果直接模拟需要反复遍历大量数据,可以考虑优化操作过程,避免不必要的重复计算。使用 HackerRank 作答时,也要留意函数签名、参数类型和返回值是否符合题目要求。

Snowflake OA 可以使用自己熟悉的编程语言吗?

具体支持哪些语言,需要以 HackerRank 考试页面提供的选项为准。备考时建议选择自己熟悉的语言,并提前练习标准输入输出、常用数据结构和排序等操作,减少考试时处理语法问题的时间。

END