Google OA New Grad 面經|1.29 兩題真題覆盤與解題思路解析

最近連續刷了不少 OA,這場 Google 的整體體驗還是一句話評價:題目數量少,但思考成本不低。
不是那種靠手速或者套路就能穩拿的 OA,尤其第一題,規則一多,稍微想歪就很容易走進死衚衕。這次 OA 一共兩道題,時間本身不算緊,但對思路的要求比較高,屬於那種想對了就很順,想歪了就一直卡著的型別。

第一題:棋子跳躍 + 硬幣最大化

題目給了一條字串作為棋盤,其中 T 表示棋子,C 表示硬幣,. 表示空位。每個棋子只能向右移動,而且每次必須正好跳 3 個格子,可以連續跳多次,但不能落在已經有其他棋子的位置上。如果落在硬幣上,就可以收集該硬幣,每個硬幣只能被收集一次,最終目標是最多能收集多少個硬幣。

這題一開始很容易被帶偏,比如試圖把所有棋子統一規劃、做全域性最優匹配,甚至往 DP 上靠,但其實這些思路都會把問題複雜化。關鍵在於,每個棋子能到達的位置是完全確定的,只可能是當前位置往右的 i+3, i+6, i+9... 這些點。

一個比較穩的做法是從左到右掃描每一個棋子,按順序處理。對於當前這個棋子,只在它能跳到的位置中尋找還沒被使用的硬幣,並且優先選擇最靠左的那個。一旦匹配成功,就認為這個棋子完成任務,不再繼續向右跳,同時把對應的硬幣標記為已使用。

這樣做的直覺在於:越早、越靠左地使用硬幣,越能給後面的棋子留下更多可用空間。這是一個很典型的貪心場景,用區域性最優來避免後續衝突。實際寫程式碼時,只要把「棋子佔用」和「硬幣是否已被收集」這兩個狀態處理清楚,整體邏輯會非常順。

Google OA 真题

第二題:共享數字的最大子集

第二題整體就輕鬆很多,題目給了一個陣列,裡面都是 10 到 99 的兩位數。你可以從中選出一組數字,要求這組裡的所有數至少共享一個相同的數字(0 到 9 中的任意一個),問最多能選多少個。

乍一看像是在考子集或者組合,但其實條件非常單一:只要存在某一個數字 d,使得選中的所有數都包含這個 d,就滿足要求。換句話說,問題可以直接轉化成:對每個數字 0–9,統計陣列中有多少個數包含它。

具體做法就是列舉 0 到 9,每次掃描一遍陣列,統計包含當前數字的元素數量,最後取一個最大值即可。只要想清楚「共享一個數字」等價於「圍繞某個固定數字做篩選」,這題基本就是一道純計數題。

總結感受

這次 Google OA 給人的感覺很典型:題目不多,但每一道都要求你對問題本質判斷得足夠快。第一題更偏向規則理解和貪心策略是否選對,第二題則是考你能不能迅速把抽象條件拆成可列舉、可統計的形式。

整體難度不算離譜,但絕對不是那種靠刷題數量就能穩過的 OA。如果最近在準備 Google 或其他大廠的線上測評,這類「規則多、但解法其實不復雜」的題型,真的值得多刻意練幾次,避免在考場上被自己繞進去。

真實場景下,很多人缺的不是刷題

針對這種 OA / Live Coding 場景,Programhelp 提供的實戰遠端輔助支援,很多同學真正需要的,其實不是多刷幾道題,而是在最容易想歪的那 5 分鐘裡有人把你拽回來。如果你現在正卡在大廠 OA、VO 或現場 coding 的關鍵階段,OA無痕輔助 在實戰中確實能明顯降低翻車機率,至少不會輸在想複雜了這種最可惜的地方。

author avatar
Jory Wang Amazon資深軟體開發工程師
Amazon 資深工程師,專注 基礎設施核心系統研發,在系統可擴充套件性、可靠性及成本最佳化方面具備豐富實戰經驗。 目前聚焦 FAANG SDE 面試輔導,一年內助力 30+ 位候選人成功斬獲 L5 / L6 Offer。
END
 0