兩個有序陣列中位數

2021-10-08 18:03:19 字數 1007 閱讀 1057

首先我們可以不斷分割得到這個kkk。

首先兩個陣列都分配k

2\frac

2k​,如果第k

2\frac

2k​個數,第乙個陣列小於第二個陣列,那麼第乙個陣列的k

2\frac

2k​個數一定不是答案。

問題可以變成乙個子問題,上乙個陣列從k2+

1\frac+1

2k​+

1開始。

相當於我們每次要去掉k/2

k/2k/

2個不可能的元素。

如果有某個陣列到底了,沒有k/2

k/2k/

2個元素了,那麼肯定是從另乙個陣列扣除。

為什麼呢?

我們考慮如果答案在上面,下面至少要有》k/

2>k/2

>k/

2個去掉。

如果答案在下面,也要去掉至少k

>

2k>2

k>2個。

因為上面是

22的,所以下面無論如何第k

kk個也比k/2

k/2k/

2多。最後遞迴得到結果。

class

solution

//演算法核心在於二分區間,對於k然後不斷縮小範圍

double

findmediansortedarrays

(vector<

int>

& nums1, vector<

int>

& nums2)

};

非遞迴

class

solution

}//演算法核心在於二分區間,對於k然後不斷縮小範圍

double

findmediansortedarrays

(vector<

int>

& nums1, vector<

int>

& nums2)

};

兩個有序陣列中位數

大小m和n分別有兩個排序陣列a和b。找到兩個排序陣列的中值。總的執行時間複雜度應該是o log m n class solution return findkth a,b,0,0,m,n,s 2 findkth a,b,0,0,m,n,s 2 1 2 private double findkth v...

兩個有序陣列的中位數

問題一 兩個有序陣列,且長度都為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 小,則倆陣列合併後就恰好...