DoorDash 面试真题实录:Top K Frequent Elements 面试全过程拆解(含英文原题)

这道题是典型高频题,DoorDash 面试里经常用来观察候选人对数据结构的掌控,以及在有限时间内如何快速收敛到最优解。


英文原题

Top K Frequent Elements

Given an integer array nums and an integer k, return the k most frequent elements. You may return the answer in any order.

Example:

  • Given [1,1,1,2,2,3] and k = 2 → [1,2]
  • Given [1,2,3,2,3] and k = 2 → [2,3]
  • Given [1,2,3,4] and k = 2 → [1,2]

给你一个整数数组,找出出现次数最多的前 k 个数字,顺序无要求。

面试官关注点很直接:你怎么在一遍扫描后快速筛出“最常出现的那几个”。


候选人拿到题目后第一反应是确认边界:

“结果顺序不重要吗?”
“k 一定小于等于数组中不同元素个数吗?”

面试官确认后,候选人很自然开始思考。

第一步是频率统计,用一个 HashMap 存每个数字出现次数。这一步没有悬念,时间复杂度 O(n)。

接下来是核心部分:如何拿到 top k。

候选人一开始提到排序,把所有元素按频率排序再取前 k。面试官没有打断,只是问了一句复杂度。候选人自己意识到这是 O(n log n),开始往更优方向调整。

思路切换到堆。

这里的关键点出现了:
不是用大顶堆,而是用小顶堆,容量限制为 k。

整个过程是这样推进的:

  • 遍历 frequency map
  • 每个元素丢进堆
  • 堆大小超过 k 时,弹出最小频率

这样堆里始终保留的是当前最“值钱”的 k 个元素。

候选人当时的代码思路如下(整理自你给的实现):

他在讲的时候有一句很加分:“heap size is only k, so log factor is small”。面试官点头。


很多人卡在面试,不是不会做题,是不知道怎么“在面试里把题做对”。

真实面试里,每一句解释、每一个停顿、每一次修正思路,都会影响评价。

csoahelp 做的事情很简单:
在你面试的时候,实时帮你把思路补完整,把表达变清晰,把答案稳住。

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

Leave a Reply

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