演算法 排序陣列中位數

2021-10-08 12:35:13 字數 1027 閱讀 5043

給定兩個大小為 m 和 n 的正序(從小到大)陣列 nums1 和 nums2。

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

你可以假設 nums1 和 nums2 不會同時為空。

示例 1:

nums1 = [1, 3]

nums2 = [2]

則中位數是 2.0

示例 2:

nums1 = [1, 2]

nums2 = [3, 4]

則中位數是 (2 + 3)/2 = 2.5

1.中位數定義:

如果某個有序陣列長度是奇數,那麼其中位數就是最中間那個,如果是偶數,那麼就是最中間兩個數字的平均值。這裡對於兩個有序陣列也是一樣的,假設兩個有序陣列的長度分別為m和n,由於兩個陣列長度之和 m+n 的奇偶不確定,因此需要分情況來討論,對於奇數的情況,直接找到最中間的數即可,偶數的話需要求最中間兩個數的平均值。

2.限制了時間複雜度為o(log (m+n))。

3.在兩個有序陣列中找到第k個元素,需要新定義乙個新陣列。

public

double

findmediansortedarrays

(int

nums1,

int[

] nums2)

else}if

(n ==0)

else

}int count =0;

int i =

0, j =0;

while

(count !=

(m + n)

)break;}

if(j == n)

break;}

if(nums1[i]

< nums2[j]

)else}if

(count %2==

0)else

}

時間複雜度:遍歷全部陣列 (m+n)

空間複雜度:開闢了乙個陣列,儲存合併後的兩個陣列 o(m+n)

參考:

二排序陣列中位數

9.3 8設x 1.n 和 y 1.n 為兩個陣列,每個都包含n個已排好序的數。給出乙個求陣列x和y中所有2n個元素的中位數的o lgn 時間的演算法 分析與解答 若中位數字於x中,不妨設為x k 即在x中有k個元素小於等於中位數,n k個元素大於等於中位數。由於x k 為合併後的2n個元素的中位數...

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

有兩個排序的陣列,長度都為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 的有序陣列nums1和nums2。請找出這兩個有序陣列的中位數。要求演算法的時間複雜度為 o log m n 你可以假設nums1和nums2不同時為空。示例 1 nums1 1,3 nums2 2 中位數是 2.0 示例 2 nums1 1,2 nums2 3,4...