雅虎筆試題 兩個已經排好序的陣列,找中位數

2022-02-05 11:25:03 字數 774 閱讀 3562

題目:現在有兩個排好序的整數陣列,a[n]和b[n],要求寫乙個函式,功能為返回兩個陣列中第n大數和第n+1大數的中間值,即求解兩者的和除以2。

函式原型:double getmedian( int a, int b );

下面,我們先來分析乙個類似的問題,假設a和b都是公升序的,分別有n1和n2個元素,求兩個陣列合併後第k大元素值。

分別取兩個陣列中間索引的數,a[x]和b[y],比較兩個數的大小:

if( a[x] <= a[y] )

如果k <= x+y+1,則可以判斷出b[y]以及b[y]後面的元素都可以排除在外,減小搜尋規模。

如果k  > x+y+1,則可以判斷出a陣列的前半部分元素都不符合條件,減少a一半的搜尋規模。

該演算法利用了遞迴的思想,結束條件是:

a中元素排除出去,則選擇b中得第k大元素;

b中元素全部排除,選擇a中第k大元素。

實現的**如下:

#include 

#include

#define n 5

int a[n] = ;

int b[n] = ;

//獲取陣列a中從s1到n1個元素

//陣列b中s2到n2個元素,合併後的第k大元素

int getmedian( int s1, int n1, int s2, int n2, int k )

else

}else

else

}return0;}

int main()

雅虎筆試題 兩個已經排好序的陣列,找中位數

題目 現在有兩個排好序的整數陣列,a n 和b n 要求寫乙個函式,功能為返回兩個陣列中第n大數和第n 1大數的中間值,即求解兩者的和除以2。函式原型 double getmedian int a,int b 下面,我們先來分析乙個類似的問題,假設a和b都是公升序的,分別有n1和n2個元素,求兩個陣...

找出兩個已經排好序的陣列的中位數

問題 給兩個已經排好序的陣列,乙個長度為 m m 1 乙個長度為 n n 1 找出這兩個陣列的中位數。時間複雜度要求為 o m n 空間複雜度為 o 1 其實這個問題本身來講是不難的,關鍵的關鍵,是對一些邊界條件的處理。思路 我們首先判斷中位數的位置,如果 m n 為奇數,那麼中位數的位置是 第 m...

排序 四 歸併排序(合併兩個已經排好序的陣列)

是建立在歸併操作上的一種有效的排序演算法。平均 最好和最壞時間複雜度都為o nlog2n 線性對數。是穩定的。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用,且各層分治遞迴可以同時進行。也叫歸併演算法,指的是將兩個已經排序的序列合併成乙個序列的操作。歸併排序演算法依...