九章演算法面試題27 最大連續子集

2021-07-02 12:40:06 字數 452 閱讀 2500

給乙個整數集合s,定義s的子集d為連續子集當且僅當d中的整數構成連續的整數序列。求s的最大連續子集,即包含連續整數最多的子集。如的最大連續子集為

下面給出乙個時空複雜度都是o(n)的方法:使用hash表,索引當前找到的所有連續子集。對於每個集合,索引和,如:,  3: , 5: , 6: } 。遍歷s的時候,假設遍歷到數k,檢查k-1為最後乙個數和k+1為第乙個數的集合在hash表中是否存在,如果存在則和k一起合併為乙個大的集合,刪除之前的集合,並加入新的集合。這樣每一次操作時間複雜度是o(1)的。最後找到hash表中最大的集合輸出即可。

這個題目的考點是hash表。首先你可以答乙個簡單的排序的方法,複雜度是o(nlogn),這時候面試官會提示是否有更好的方法,於是要去想o(n)的方法。那麼自然也就是需要考慮到s集合只能遍歷一次。考慮使用一些o(1)複雜度的資料結構來加速運算,則想到hash表。進而想到對於已經找到的集合,在hash表中儲存左右邊界。

九章演算法 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 ...

九章演算法面試題32 小球排序

有紅黃藍三色的小球若干排成一列,這些小球進行排序,請使用盡量少的空間和時間。假設順序為紅色黃色藍色。用兩根指標從頭開始遍歷,第一根指標遇到非紅色時停下,如果第二根指標找到第一根指標之後的第乙個紅色停下,交換兩根指標所指顏色。重複上述過程。直到第二根指標找不到任何紅色。此時第一根指標到最後都是黃色或藍...

九章演算法面試題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 是波峰,則...