Notes
← All notes
·frontend·11 min

LeetCode Cycle 02:String / Array / Object 的 runtime 與 surrogate pair 陷阱

資深面試問 array 不是要你會 push/pop,而是要你解釋為什麼 shift 是 O(n)、為什麼 split('') 拆 emoji 會壞、為什麼 spread 跟 Array.from 反而對。內部使用。

#leetcode#algorithm#string#array#object#utf-16#interview-prep#面試系列#private

LeetCode Cycle 02 在 Notion 的筆記只列了三件事:array 操作的 runtime 表、字串轉陣列的四種方法、Object 當 hash 用的取捨。看似基礎,但這組題在資深面試裡是篩面試官——junior 會背 push/pop 是 O(1),senior 要解釋 V8 內部為什麼 shift 必須 re-index,還要知道 '😋'.length === 2 背後是 UTF-16 surrogate pair[^1]。這篇把這三條主軸拆開,每條附對應的 LeetCode 題型跟現場踩過的雷。

Array 六個常用操作的 runtime 對照

先把表打出來,後面每一條都會回頭引用:

操作動作runtime是否 mutate
push(x)尾端新增O(1) amortized
pop()尾端移除O(1)
unshift(x)開頭新增O(n)
shift()開頭移除O(n)
slice(i, j)取子陣列回傳新陣列O(j-i)
splice(i, deleteCount, ...items)從 i 開始增刪O(n)

junior 在白板上寫到 arr.shift() 一臉沒事,senior 應該要在這一秒問自己:「我這一行剛剛做了一次 O(n) 操作,到底有沒有必要?」