AppLovin 面试真题复盘:Product of Array Except Self – 一亩三分地 – 面试辅助 – 代面试 – VO support

这是候选人在 AppLovin Software Engineer 面试中遇到的一道算法题。面试官给出一个整数数组 nums,要求返回一个新数组 result,其中 result[i] 等于数组中nums[i] 以外所有元素的乘积

Example:

input:  [2, 4, 3, 5]
output: [60, 30, 40, 24]

Explanation:

60 = 4 × 3 × 5
30 = 2 × 3 × 5
40 = 2 × 4 × 5
24 = 2 × 4 × 3

面试过程细节

面试官先确认候选人是否理解题意。

候选人复述问题:

我们需要返回一个数组,每个位置的值等于整个数组的乘积,但不包括当前元素。

面试官点头确认,然后继续追问:

Interviewer

Can you think of a straightforward solution first?

候选人先给出了一个最直观的思路:

每个位置遍历整个数组,把除了自己之外的所有数相乘。

候选人解释:

如果数组长度是 n,那么每个元素都要遍历 n 次,总复杂度是:

O(n²)

面试官继续问:

Can we do better?


候选人优化思路

候选人开始重新思考。

如果每次都重新乘一遍数组,其实很多计算是重复的。

于是他提出一个关键想法:

把数组拆成两部分:

左边所有元素的乘积
右边所有元素的乘积

对于每个位置 i

result[i] = 左边乘积 × 右边乘积

举个例子:

nums = [2,4,3,5]

对于 3 这个位置:

左边乘积 = 2 × 4
右边乘积 = 5
result = 8 × 5 = 40

这样每个位置只需要:

prefix product × suffix product

面试官追问

面试官继续问了两个典型问题。

1 能否使用除法?

候选人回答:

如果允许使用除法,可以先计算:

total_product = 所有元素乘积

然后

result[i] = total_product / nums[i]

但如果数组里有 0,这个方法就会出问题。

因此面试官提示:

Assume division is not allowed.


2 时间复杂度是多少?

候选人解释:

构建 prefix product 一次遍历
构建 suffix product 再一次遍历

因此整体复杂度:

Time Complexity: O(n)
Space Complexity: O(n)

随后候选人进一步补充:

其实 suffix 乘积可以在第二次遍历时动态计算,因此可以把空间优化到:

O(1) extra space

面试官表示这个回答很好。


面试评价

这道题是一个非常经典的面试题,很多公司都会考,例如:

  • Facebook / Meta
  • Google
  • TikTok
  • AppLovin

难点其实不在算法本身,而在 面试中的表达过程

候选人需要:

  1. 先给出朴素解法
  2. 主动分析复杂度
  3. 再提出优化方案
  4. 解释为什么不能用除法
  5. 最后给出复杂度分析

整个过程如果表达清晰,基本就是一个 strong hire 的表现。

csoahelp 面试辅助

很多候选人其实都会做这道题,但在真实面试中仍然容易失败,例如:

  • 思路表达混乱
  • 没有先说 naive solution
  • 没有分析复杂度
  • 写代码速度太慢

csoahelp 的面试辅助中,我们会:

  • 实时帮助候选人梳理解题思路
  • 提供算法提示
  • 辅助完成代码实现
  • 同时支持系统设计和八股问题

如果你即将参加:

  • TikTok
  • Meta
  • Google
  • AppLovin
  • Stripe

等公司的技术面试,可以联系 csoahelp 获取帮助。

如果你最近有 VO 面试,提前准备这些 真实题型和思路,会非常关键。

我们也有代面试,面试辅助,OA代写等服务助您早日上岸~

Leave a Reply

Your email address will not be published. Required fields are marked *