前段时间收到了 Google 的 OA 邀请,时间限制是 90 分钟,三道题。说实话,OA 不算是难到天花板的那种,但题目覆盖面挺广,既要考虑算法,也要注意实现细节。如果你没有提前做过类似题型,时间压力会很大。
这篇文章来还原比较真实的体验,也分享一些我个人的解题策略和遇到的坑点。
OA 概览
- 公司:Google
- 时长:90 分钟
- 题量:3 道 Coding 题
- 难度感受:中等偏上,数据结构与字符串处理题为主
- 平台:HackerRank
- 编程语言:Python(支持多语言)
- 加分点:写出干净、可读性高的代码,别忘了边界测试
Coding 真题
1. Word Pattern Matcher
Given a pattern string consisting of lowercase letters and a sentence of words, determine if the sentence follows the same pattern. Each letter in the pattern corresponds to a unique word, and each word maps to exactly one letter.
Example:
Input: pattern = "abba", s = "dog cat cat dog"
Output: True
Input: pattern = "abba", s = "dog cat cat fish"
Output: False
Constraints:
1 <= pattern.length <= 3001 <= s.length <= 3000
2. Top K Frequent Listings
Given an array of Google Search query IDs, return the top k most frequent IDs. If two IDs have the same frequency, return the smaller ID first.
Example:
Input: ids = [1,1,2,2,2,3], k = 2
Output: [2, 1]
Constraints:
1 <= ids.length <= 10^51 <= id <= 10^9
3. Merge Booking Intervals
Given a list of meeting time intervals where intervals[i] = [start, end], merge all overlapping intervals and return the result in sorted order.
Example:
Input: [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
Constraints:
1 <= intervals.length <= 10^40 <= start < end <= 10^9
我的解题策略
- 先做最稳的题:我先做了第一题,因为哈希映射模式匹配是常见套路,很快能写出来。
- 第二题用库函数节省时间:Python 的
collections.Counter+heapq很快搞定,时间复杂度也稳在 O(n log k)。 - 第三题排序合并:先按 start 排序,再线性扫描合并,注意边界条件。
常见坑点
- 忘记处理空输入(尤其是字符串分割时)。
- 第二题的 tie-break(相同频率时按 ID 升序)容易漏掉。
- 合并区间题,intervals 没有先排序会出错。
- HackerRank 的 Python 默认是 Python3,注意
input().split()读取。
FAQ
Q: 如果中途卡住怎么办?
A: 先跳到下一题,不要硬耗时间,留最后 5 分钟再回来尝试补。
Q: 需要写很复杂的优化吗?
A: Google OA 更看重正确性和可读性,除非题目明确要求,否则 O(n log n) 的解法已经足够。
Q: 边界条件重要吗?
A: 非常重要,我最后检查时发现第二题在 k > distinct_ids 时没 return 全部 ID,幸好及时修正。
从容应战,赢下下一场 OA
这次 Google OA,我不仅提前 10 分钟完成了全部题目,还用剩余时间做了更多测试,确保边界情况都覆盖到。Programhelp 的协助,不是简单代写,而是帮你用最快的方式锁定高分,让你在考试中保持自信和稳定节奏。与其独自硬撑,不如让经验丰富的伙伴在背后为你保驾护航。