百度面試 求多個有序陣列中前n的最大值

2021-06-13 07:45:04 字數 670 閱讀 1694

我把這題推廣到乙個型別:有n個陣列,每個陣列裡面有m個陣列,降序排列,每個數字是32位的unit,求出這m*n個數字中最大的k個。

我們先思考乙個問題有兩個陣列 a1[m],a2[m],我們求這兩個陣列中最大的k個值

那麼我們假設a1中前x1個數屬於最大的k個值,a2中前x2個數輸入最大的k值

那麼x1+x2 = k;如圖

由此我們可以得出x1和x2中肯定有乙個大於等於k/2,怎麼確定呢,我們只需比較a1[k/2]和a2[k/2]誰大那麼就說麼誰大於k/2;那麼我們就直接把他的前k/2取出來。剩下的我們就遞迴取出就ok了,每次我們可以去除剩下的1/n個,(比較k/n時你可能碰到有的陣列被取完了或者不夠k/n自己稍加處理即可)測試程式

#include

using namespace std;

int main()

{int n, m, k, icount;

//有n個陣列,每個陣列裡面有m個陣列,降序排列,每個數字是32位的unit,求出這m*n個數字中最大的k個。

while (cin >> n >> m>> k)

{icount = 0;

while (k >=n)

{cout<

求有序陣列中處於 left,right 區間的部分

該問題可分解為求陣列中第乙個不小於left的下標和求陣列中最後乙個不大於right的下標。include include 求陣列中第乙個不小於left的下標 int firstnotlower const std vector num,const int left low和high相鄰後,分別與le...

百度面試題 從已排序的陣列中求絕對值最小的元素

題目為 有乙個已經排序的陣列 公升序 陣列中可能有正數 負數或0,求陣列中元素的絕對值最小的數,要求,不能用順序比較的方法 複雜度需要小於o n 可以使用任何語言實現 例如,陣列 絕對值最小的是 4。這一題該如何求呢?初步的解決思路是 1.陣列中的元素全為正,取最左邊的數字 2.陣列中的元素全為負,...

百度面試題 把陣列排成最小的數

問題描述 輸入乙個正整數陣列,將它們連線起來排成乙個數,輸出能排出的所有數字中最小的乙個。例如輸入陣列,則輸出這兩個能排成的最小數字32132。請給出解決問題的演算法,並證明該演算法。思路 先將整數陣列轉為字串陣列,然後字串陣列進行排序,最後依次輸出字串陣列即可。這裡注意的是字串的比較函式需要重新定...