剛帶學員走完一場 TikTok 2026 Intern SDE OA 。整場考試節奏其實挺快的,四道題基本都是比較典型的演算法 / 模擬題型,如果平時刷題量還可以的話,思路基本都能很快反應出來。
這次整體用時不長,前兩題屬於比較基礎的實現題,後兩題稍微需要一點思路,但也不算特別複雜。學生第三題一開始抄程式碼的時候有個小地方寫錯了,不過及時檢查出來修改之後也順利 AC 了,最後四題全部透過。
下面簡單把題目型別和核心思路整理一下,給後面準備 TikTok OA 的同學參考。

Q1 繪製星號邊框正方形
題目描述
第一題屬於典型的輸出模擬題。題目給定一個整數 n,要求列印一個 n × n 的正方形,其中邊框使用 *,中間部分為空格,也就是常見的“空心正方形”。
例如 n = 5 時,輸出結構大致如下:
*****
* *
* *
* *
*****
整體就是要求把正方形的四條邊用星號填滿,而中間區域保持為空。
解題思路
實現時可以透過兩層迴圈來完成。外層迴圈控制行數,內層迴圈控制列數。對於每一個位置 (i, j),根據它是否位於邊界來決定輸出內容。
當行號是第一行或最後一行時,整行都輸出 *。如果是中間的行,則只在第一列和最後一列輸出 *,中間的部分全部輸出空格。這樣就能形成一個完整的邊框結構。
需要注意一個特殊情況:如果 n = 1,只需要輸出一個 * 即可。這個題整體難度非常基礎,主要是考察迴圈控制和輸出格式。
Q2 雙城往返時間計算
題目描述
第二題開始進入模擬類問題。題目給定兩個城市之間的發車時刻表,並且每個方向都有固定的發車時間列表。乘客需要不斷在兩個城市之間往返。
規則是每次乘車必須選擇發車時間不早於當前時間的班次。乘車之後會消耗100 分鐘(包括行程和中轉),然後需要繼續從另一座城市乘坐下一班車。
題目的目標就是根據這些時刻表,模擬整個往返過程。
解題思路
這個題的核心其實是時間推進模擬。我們可以維護一個當前時間 t,每次準備乘車時,都要在當前方向的時刻表中找到第一班發車時間大於等於當前時間的車次。
找到這班車之後,就可以更新當前時間為 departure + 100。隨後切換方向,從另一座城市的時刻表中繼續尋找下一班車。
如果時刻表是已經排好序的陣列,那麼尋找下一班車時可以使用二分查詢(例如 lower_bound)。這樣每次查詢的時間複雜度就是 O(log n),整體效率會比較高。
Q3 最小山峰高度差
題目描述
第三題是一道陣列類問題。題目給定一個陣列 height 表示山峰高度,同時給定一個整數 k,表示兩個山峰之間的最小索引距離。
要求在所有滿足 |i - j| ≥ k 的山峰對中,找到高度差最小的一對,並輸出這個最小差值。
換句話說,需要在所有合法的 (i, j) 組合中,計算 |height[i] - height[j]|,然後取最小值。
解題思路
最直接的方法就是列舉所有滿足條件的山峰對。可以透過兩層迴圈遍歷陣列,分別作為 i 和 j。在遍歷時只需要判斷兩者的索引差是否滿足 |i - j| ≥ k。
如果滿足條件,就計算兩座山峰的高度差,並更新當前最小值。整個過程其實就是一個簡單的暴力列舉。
這種方法的時間複雜度是 O(n²)。如果陣列規模不是特別大,在 OA 中通常是可以透過的。理論上也可以透過排序或滑動視窗等方法進一步最佳化,但大多數情況下並不需要。
Q4 航班往返任務模擬
題目描述
第四題的結構和第二題其實非常相似,同樣是一個時間模擬問題。題目給定兩個地點:Alpha 和 Beta,並且給出兩個方向的航班時刻表。
每個任務都需要完成一次往返,也就是:
Alpha → Beta → Alpha
並且需要重複執行多次任務。
解題思路
解題思路依然是模擬時間推進。我們首先維護一個當前時間 t。每次從 Alpha 出發時,需要在 Alpha → Beta 的航班列表中找到最早一班發車時間不早於當前時間的航班。
乘坐這班航班之後,更新當前時間為到達時間。接著在 Beta → Alpha 的航班列表中再次尋找下一班符合條件的航班。完成這兩步之後,就完成了一次往返任務。
隨後繼續重複這個過程,直到所有任務完成。如果航班時刻表是有序的,同樣可以使用二分查詢來快速定位下一班航班,這樣整個模擬過程的效率會更高。
OA 卡殼其實挺常見
我們這邊平時也會帶學員做 TikTok / Amazon / Google / Uber 的 OA 實戰模擬,如果你對這種 OA 不太熟或者擔心臨場發揮,也可以瞭解一下我們的 面試輔助 / OA 實時助攻 ,關鍵時刻給一點思路提醒,很多同學就是這樣穩穩把 OA 過掉的。