九章演算法面試題64 找第k大的特殊數

2021-07-02 13:07:55 字數 620 閱讀 7009

有一種特殊的數,它的素數因子只有可能是3,5,7,不可能是其他的素數, 我們把這種數從小到大排序,得到3,5, 7, 9, 15 ... 現在我們要求其中第k大得數是多少,比如其中第4大的數是9。

我們所要求的元素如果除以3,5,7然後排序過後可以分成為三類元素。

a. 1×3, 3×3, 5×3, 7×3,9×3, …

b. 1×5, 3×5, 5×5, 7×5, 9×5, …

c. 1×7, 3×7, 5×7, 7×7, 9×7,…

最後其實相當於是把三個數列merge到一起,然後找出這個merge數列的第k大,並且分解後相乘的兩個數中的第乙個元素剛好是我們所求的數列,然後第二個數是3,5,7。 我們知道merge三個數列的演算法是用三個指標,所以我們可以借鑑這種merge的做法 。我們設三個指標p3,p5,p7,最開始p3=0,p5=0,p7=0, 然後用乙個陣列a記錄我們要求的數列。最開始數列第乙個元素是a[0]=1 ,然後每次選取(a[p3]*3,a[p5]*5, a[p7]*7)中最小的元素作為下乙個元素插入到陣列a中,如果最小的元素是p3,那麼p3指向下乙個元素p3++, 同理如果是p5, p5++ , 如果是p7那麼p7++ , 所以第k步的時候,a[k]就儲存了我們所求的元素。 這樣最後這道題的時間複雜度就是o(n)。

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