中興筆試題 兩有序陣列的中位數求解

2021-05-28 08:55:53 字數 856 閱讀 4418

題目:設x[1..n]和y[1..n]為兩個陣列,每個都包含n個已排好序的數。給出乙個求陣列x和y中所有2n個元素的中位數的、o(lgn)時間的演算法。

首先假設中位數等於m,在陣列x中。假設x[k]=m,於是x中就有k個元素小於等於m,n-k個元素大於等於m。我們知道如果兩個陣列合併起來,必然有n個元素小於等於m,n個元素大於等於m。所以陣列y中一定有n-k個元素小於等於m,n-(n-k)=k個元素大於等於m。

所以,我們可以通過檢測y[n-k]<=x[k]<=y[n-k+1]是否成立來確定x[k]是否是中位數。k=n是一種邊界情況,這時n-k=0,不存在y[0],於是我們只需要檢測x[n]<=y[1]是否成立。

如果中位數在陣列x中但不是x[k],上述條件將不再成立。如果中位數是x[k'] (k'y[n-k+1]。相反,如果中位數是x[k''] (k''>k),則x[k]小於中位數,x[k]high

then return not-found

else k<-(low+high)/2

if k=n and a[n]<=b[1]

then return a[n]

elseif kb[n-k+1]

then return find-median(a, b, n, low, k-1)

else return find-median(a, b, n, k+1, high)

two-array-median(x, y)

n<-length[x]

median<-find-median(x, y, n, 1, n)

if median=not-found

then median<-find-median(y, x, n, 1, n)

return median

求兩有序陣列的中位數

給定兩個大小為 m 和 n 的正序 從小到大 陣列nums1和nums2 找出並返回這兩個正序陣列的中位數 時間複雜度o log m n 解法 二分法查詢 public class main int nums2 system.out.println mid solution.method nums1...

求兩個有序陣列的中位數

要求 給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 例如 nums1 1,3 nums2 2 則中位數是 2.0 nums1 1,2 nums2 3,4 則中位數是 2 3 2 2.5 演算法解析...

求兩個有序陣列的中位數

原部落格 設陣列a的長度為m,陣列b的長度為n,兩個陣列都都是遞增有序的。求這兩個陣列的中位數 首先我們看看中位數的特點,乙個大小為n的陣列,如果n是奇數,則中位數只有乙個,陣列中恰好有 n 1 2 個元素比中位數小。如果n是偶數,則中位數有兩個 下中位數和上中位數 這裡我們只求下中位數,對於下中位...