大小m和n分別有兩個排序陣列a和b。找到兩個排序陣列的中值。總的執行時間複雜度應該是o(log(m+n))。
classsolution
// return (findkth(a,b,0,0,m,n,s/2)+findkth(a,b,0,0,m,n,s/2+1))/2;
} private
: double
findkth(vector<
int> a, vector<
int> b,
intstart1,
intstart2,
intm,
intn,
intk)
//start1,start2代表每個vector起始的下標;m,n代表各vector剩餘的元素個數
//本題捨棄的均為各自陣列所選下標之前的元素
};
兩個有序陣列中位數
首先我們可以不斷分割得到這個kkk。首先兩個陣列都分配k 2 frac 2k 如果第k 2 frac 2k 個數,第乙個陣列小於第二個陣列,那麼第乙個陣列的k 2 frac 2k 個數一定不是答案。問題可以變成乙個子問題,上乙個陣列從k2 1 frac 1 2k 1開始。相當於我們每次要去掉k 2 ...
兩個有序陣列的中位數
問題一 兩個有序陣列,且長度都為n。找出中位數。解決這個問題的方法很多。方法一 基於歸併排序的merge方法。找出兩個陣列中第n大的數和第n 1大的數,然後求它們的平均數。時間複雜度為o n 方法二 比較兩個陣列中的中位數的大小。每一次比較都能縮小兩個陣列的搜尋範圍。時間複雜度為o nlgn pub...
兩個有序陣列的中位數
o logn 兩種方法 一 二分查詢 中位數只有乙個,它前面有 c m n 1 2 個數比它小。中位數要麼出現在陣列a中,要麼出現在陣列b中,我們先從陣列a開始找。考察陣列a中的乙個元素a p 在陣列a中,有 p 個數比a p 小,如果陣列b中恰好有 c p 個數比 a p 小,則倆陣列合併後就恰好...