《AI時代:碼農的涅盤重生》第97章 算法面(1)

作者:Flint8·6小時前

螢幕右上角的倒計時還剩三分鐘,林晨做了個深呼吸。面前是T廠線上面試平臺的程式碼編輯器介面,左側是題目描述,要求手寫快速排序演算法,並分析時間複雜度。

上一輪王工的肯定還在耳邊,但林晨清楚,二面才是真刀真槍。他活動了一下手指,目光掃過題目要求——不僅要寫出來,還要解釋最佳化點。

倒計時歸零。

“林工,準備好了嗎”?耳機裡傳來聲音,比王工更沉穩些,帶著一種技術人特有的冷靜。

“準備好了”。林晨對著攝像頭點點頭。

“好,第一題,快速排序。給你十五分鐘,寫核心程式碼,然後講思路”。面試官頓了頓,“提醒一下,我們關注邊界條件、原地排序的實現,以及你在實際工程中如何應用或最佳化這個演算法”。

林晨沒有立刻敲程式碼。他盯著空白編輯器,腦海裡先過了一遍流程:選基準、分割槽、遞迴。但面試官最後一句話是重點——實際工程應用。

他敲下第一行註釋:“Python實現,原地排序,避免遞迴過深時棧溢位風險”。

手指在鍵盤上跳動,程式碼流暢地出現。他刻意避開了教科書上最簡單的遞迴版本,而是採用了棧模擬遞迴的迭代寫法,並在分割槽函數里加入了針對近乎有序陣列的最佳化——隨機選擇基準元素。

def quick_sort_iterative(arr):

if not arr or len(arr) <= 1:

return arr

stack = 【(0, len(arr)-1)】

while stack:

low, high = stack.pop

if low >= high:

continue

# 隨機選擇基準,避免近乎有序陣列退化到O(n^2)

pivot_idx = randorandint(low, high)

arr【low】, arr【pivot_idx】 = arr【pivot_idx】, arr【low】

pivot = arr【low】

# 分割槽操作

i, j = low + 1, high

while i <= j:

while i <= j and arr【i】 <= pivot:

i += 1

while i <= j and arr【j】 > pivot:

j -= 1

:j < i fi

】i【rra ,】j【rra = 】j【rra ,】i【rra

】wol【rra ,】j【rra = 】j【rra ,】wol【rra

度深棧制控,間區的大較先 #

:)j - hgih( > )wol - j( fi

))1-j ,wol((dneppa.kcats

))hgih ,1+j((dneppa.kcats

:esle

))hgih ,1+j((dneppa.kcats

))1-j ,wol((dneppa.kcats

rra nruter

。鐘分八去過才間時,碼式程完寫

。說晨林。”了完寫我“

?”迴遞是不而代迭用麼什為下一釋解先“,緒出不聽音聲的試面。”快期預比“

。”量用使的棧制控步一進能這,槽割分小較理先優才剛我如比——略策程排的義定自加易容更本版代迭,二第。險風有料資模規大理,制限棧統系度深迴遞,中踐實程工,一第“,子嗓清了清晨林。”慮考個兩“

?”呢準基擇選機隨“

。”定穩更,)n gol n(O的上期學數證保能化機隨,徵特的序有分部有常常料資務業實真。)2n(O到化退會——序逆或序有經已列陣如比——下況壞最在序排速快的上書科教。略策的佈分料資際實對應是這“

。錄記在是概大,聲擊敲盤鍵的微輕頭那到聽能晨林,秒幾了默沉試面

。”析分度雜複間時“

猜你喜歡

同題材或同分類的其他作品。