Salesforce AMTS OA 面经|100 分钟三道题,滑动窗口、BST DP 怎么写

Salesforce OA 云朵标识封面

这轮 Salesforce AMTS OA 走 HackerRank,100 分钟写三道 DSA 题。时间不算宽裕,第一题把单调队列写稳,后两题才有空间处理树和动态规划。做题时别把样例过了就提交:边界、空输入和大数据才是真正拉开差距的地方。

三道题分别考单调队列、树形 DP 和组合计数。第三题需要先把“BST 数量”转成递推式,直接枚举树形会在隐藏测试里爆掉。

第一题:滑动窗口里的最低成本

题目描述

给定每天的服务成本 cost[i] 和窗口长度 k,对每个连续 k 天窗口输出最低成本,再把所有窗口最低值相加。n 达到 2×10^5,不能在每个窗口里重新扫描。

解题思路

维护一个存下标的单调递增双端队列。新下标进入时,从队尾删掉成本不大于它的下标;队首一旦离开窗口就弹出。队首始终是当前窗口最小值的下标。第 k-1 天起,每一步把 cost[deque[0]] 加入答案。这样每个元素只进出队列一次,时间 O(n),空间 O(k)。

第二题:父子和受限的二叉树

题目描述

给一棵二叉树,每个节点保存非负整数。选一组节点,使任意被选节点不能与它的父节点同时被选,求可取得的最大和。节点数达到 10^5。

解题思路

后序遍历时,为每个节点返回两个值:take 表示选当前节点,skip 表示不选当前节点。take = node.val + left.skip + right.skipskip = max(left.take, left.skip) + max(right.take, right.skip)。根节点答案是两者较大值。递归深度过大时改成显式栈做两次访问标记,避免 Python 或 Java 的栈深限制。这个题的关键不是树形写法,而是把父子依赖压成两个状态。

第三题:n 个节点能组成多少棵 BST

题目描述

输入 n,计算键值为 1 到 n 时能形成多少棵结构不同的二叉搜索树,结果对 1_000_000_007 取模。测试包含 n = 2000

解题思路

dp[i] 是 i 个节点的答案。把第 j 个键放在根节点,左子树有 j-1 个节点,右子树有 i-j 个节点,所以 dp[i] += dp[j-1] * dp[i-j]。初始化 dp[0] = 1,从 1 推到 n。两层循环是 O(n²),在给定规模内可过。写代码前先统一 long 型乘法再取模,避免中间乘积溢出。

做题过程里最值得花时间的两件事

Salesforce 的题目跨度不只在数组和树。100 分钟里先用两三分钟写清函数签名、返回值和空输入,再开始编码,会比写到一半推翻状态舒服得多。二叉树题要主动补一个单节点、链状树和全零树;窗口题要补 k=1k=n、重复成本。

准备时可以把单调队列、树形 DP、优先队列各挑两道限时题。HackerRank 的体验与在线协作轮不同,能独立完成只是起点,后续技术轮还要讲清状态定义和复杂度。一篇 AMTS 的两轮经历 也提到,代码需要通过全部测试,优化思路不能只停在口头上。

FAQ

Salesforce OA 是不是只考数组题?

不是。数组、滑动窗口、树和 DP 都要准备,重点是把中等难度题写成可运行、可覆盖边界的代码。

100 分钟三题怎样分配?

先在 25 分钟内完成最顺手的一题并自测;第二题控制在 35 分钟;最后 40 分钟留给状态题和回归测试。遇到卡点先把核心状态写下来,不要在一个样例上反复调。

参考来源

关于 CSINTERVIEWHELP

进 VO 之前,可以找 CSINTERVIEWHELP 做实时面试助攻和备考辅导。CSINTERVIEWHELP 深耕北美 IT 行业多年,已帮助万余名学生进入全球 500 强企业。导师来自一线大厂资深工程师和面试官,对 Salesforce 这类注重工程文化的公司的面试套路很熟悉。无论是 OA 题型解析、OA 辅导、VO 辅助、VO 模拟面试、VO 面试陪练还是系统设计辅助,都可以获得更有针对性的准备方案:CSINTERVIEWHELP · 服务详情