有紅黃藍三色的小球若干排成一列,這些小球進行排序,請使用盡量少的空間和時間。
假設順序為紅色黃色藍色。用兩根指標從頭開始遍歷,第一根指標遇到非紅色時停下,如果第二根指標找到第一根指標之後的第乙個紅色停下,交換兩根指標所指顏色。重複上述過程。直到第二根指標找不到任何紅色。此時第一根指標到最後都是黃色或藍色。以黃色為標準繼續往後做相同的操作,則可以把黃色和藍色排好序。在遍歷的過程中,由於第二根指標不需要每次都回到第一根指標所在位置往後遍歷,所以複雜度是o(n)的。
這個題目是對排序演算法的考察。很顯然,一般來說求職者至少都能夠答上o(nlogn)的排序方法。進一步也可能會想到使用計數排序的o(n)的方法(因為只有三個顏色,統計每個顏色的個數即可)。此時面試官會要求說,如果不適用計數排序,通過簡單的比較和交換能否獲得o(n)的效率呢?很多求職者此時就會蒙掉,因為他們覺得計數排序已經最好了,面試官一定是在為難自己。在面試的過程中如果出現這種心態(覺得面試官為難自己)是非常可怕的,面試官從來不會為難求職者。面試官只是希望通過設定不同的限制條件,考察求職者的思維活躍程度。因為在實際工程中,很多情況下,都無法完全在理想的外界環境下考慮問題,需要同時考慮很多限制條件,此時正是你展現才能的時候,抓住面試官「為難」你的機會,才能脫引而出,拿到offer。
九章演算法 Google面試題 內積
描述 給定長度為n的a陣列,長度為k的b陣列 你可以從a陣列裡取k個數 規則如下 即每次可以從a陣列的最左邊或者最右邊取走乙個數,取走的數從陣列中移除 將取出的ai按取出的順序組成c陣列 求b與c的內積最大值 b與c內積為 i 0k 1bi ci 解釋1 a 1,4,3,2,5 b 1,2,3,4 ...
九章演算法面試題33 陣列波峰
乙個陣列a 1.n 假設陣列中沒有任何相鄰兩數相等,滿足a 1 n。a i 被稱為波峰,當且僅當a i a i 1 並且a i a i 1 請找到陣列中的乙個波峰。假設陣列中存在相鄰相等的數,該怎麼做?根據條件a 1 a n 可知a中一定存在波峰。用二分法,選擇中點mid,如果a mid 是波峰,則...
九章演算法面試題42 構造MaxTree
給定乙個沒有重複元素的陣列a,定義a上的maxtree如下 maxtree的根節點為a中最大的數,根節點的左子樹為陣列中最大數左邊部分的maxtree,右子樹為陣列中最大數右邊部分的maxtree。請根據給定的陣列a,設計乙個演算法構造這個陣列的maxtree。如果能夠確定每個節點的父親節點,則可以...