这道题来自 Salesforce 的真实面试,表面看是简单的数学操作,现场却很容易被带偏,尤其是在“最少操作次数”这个点上,很多候选人会一上来就写 BFS,时间直接炸掉。
题目原文如下:
Two Operations
Two integer operations are defined as:
- ADD_1: Increment the integer by 1
- MULTIPLY_2: Multiply the integer by 2
Given an integer value k, determine the minimum number of operations it takes to get from 0 to k using the two operations specified above.
这道题如果按正向思路,从 0 一直往上做选择,分支会非常多,很自然会想到 BFS。但 k 最大可以到 1016,这个解法在面试中基本等于直接放弃。
面试官真正想看的是你有没有“反着想”的能力。
把问题倒过来,从 k 回到 0。
如果当前是一个数 k,有两种可能的来源:
- 如果 k 是偶数,很可能是通过 ×2 得到的 → 可以直接除以 2
- 如果 k 是奇数,一定是通过 +1 得到的 → 那就先 -1
这个思路一旦说清楚,面试官基本就点头了。整个过程其实就是不断做这两件事:
- 奇数:k = k - 1
- 偶数:k = k / 2
直到 k 变成 0
操作次数就是答案。
举个面试中常见的例子:
k = 8
8 → 4 → 2 → 1 → 0
总共 4 步
k = 5
5 → 4 → 2 → 1 → 0
也是 4 步
这里有个细节,很多人会问:有没有可能“先加再乘”更优?
反向推导已经隐含了最优性,每一步都在贪心地减少规模,而且是唯一最优路径。
面试过程一般会有一轮追问:
如果是多个 kValues 怎么办?
答案就是逐个处理,每个数做一遍这个过程。因为每次都是 O(log k),整体复杂度是:
时间复杂度:O(n log k)
空间复杂度:O(1)
还有一个加分点是你能不能把这个过程和“二进制”联系起来。
本质上,这个过程就是在看 k 的二进制表示:
- 每个 1 对应一次 “-1”
- 每一位对应一次 “/2”
所以操作次数 ≈ 位数 + 1 的个数
这个点如果你在面试中顺出来,基本就是稳了。
这类题在 Salesforce、Amazon、Meta 都很常见,特点是:
看起来简单,现场容易写复杂,考察的是思维方向,而不是实现能力。
很多候选人不是不会写代码,而是没有在对的方向上思考。
我们也有代面试,面试辅助,OA代写等服务助您早日上岸~

