兩有序陣列中位數 c語言實現

2021-09-26 07:51:54 字數 754 閱讀 5571

給定兩個大小為 m 和 n 的有序陣列 a 和 b。

請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o(log(m + n))。

你可以假設 a 和 b 不會同時為空。

#include#include#define min(a,b) a= length_a)

if (x2 >= length_b) return a[x1 + k - 1];

if (k == 1)

int g1 = 100, g2 = 100;/*我這裡定義100,是因為c語言裡沒有極大;這是為了避免k/2大陣列長度的情況下發生錯誤;但是有更巧妙的方法,我就不寫了。

if (x1 + k / 2 - 1 < length_a)

if (x2 + k / 2 - 1 < length_b)

if (g1 < g2){

return (dg(a, x1 + k / 2, b, x2, k - k / 2,length_a,length_b));//當a陣列的g1解題實現思路:

這一題可以當作是尋找第 k =(m + n)/ 2個數,常規方法是合併排序然後求中位數,但是有時間要求,不能使用合併排序。

解法一:根據中位數的特性,可以構造乙個小堆,最右邊的孩子就是中位數;

解法二:我使用的就是這個解法,由於這是兩個有序陣列,可以使用 a陣列中的第 k/2個是和b陣列的k/2個數比較大小。第k個數一定再較小那一陣列的後半部分,或者較大陣列的前半部分。然後進行遞迴,具體可以看**注釋;

演算法題 兩有序陣列中位數

有兩個排序的陣列,長度都為n,求合併後的排序陣列的中位數。要求時間複雜度為log n 解法1 直接的解法是遍歷兩個陣列並計數,類似歸併排序裡面的有序陣列的合併,複雜度為o n 解法2 分治策略 設兩個陣列為a n b n 若a n 2 b n 2 中位數k必定位於a n 2 a n b 0 b n ...

兩個有序陣列中位數

大小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...

LeetCode 尋找兩有序陣列中位數

給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 示例 2 nums1 1,2 ...