題目:設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是偶數,則中位數有兩個 下中位數和上中位數 這裡我們只求下中位數,對於下中位...