4 尋找兩個遊有序陣列的中位數

2022-08-29 00:33:32 字數 1169 閱讀 8579

給定兩個大小為 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)假設兩個陣列的總長度是奇數, 那麼其中位數是乙個值

(2)假設偶數的中位數是兩個值的平均值

這樣子就要分奇數跟偶數長度來算了。我們探索到乙個規律,

假設兩個陣列和起來長度是偶數10,那麼就是 第5個跟第6個位置的數了,5 = (10+1)/2, 6 = (10 + 2 )/ 2;

假設兩個陣列和起來長度是奇數11, 那麼中位數就是第6個位置的數了, 6 = (11 + 1) / 2, 6 = (11 + 2) / 2;

所以題目可以轉化成第 (n + 1) / 2 跟 (n + 2) / 2位上的數的平均值。

接著,我們的問題轉移成:求兩個有序陣列中第n大的位置上的值了。

class solution 

public int search(int nums1, int nums2, int index1, int index2, int target)

if (index2 >= nums2.length)

if (target == 1)

int midval1 = (index1 + target / 2 - 1 < nums1.length) ? nums1[index1 + target / 2 - 1] : integer.max_value;

int midval2 = (index2 + target / 2 - 1 < nums2.length) ? nums2[index2 + target / 2 - 1] : integer.max_value;

if (midval1 < midval2) else

}}

4 尋找兩個有序陣列的中位數

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

4 尋找兩個有序陣列的中位數( )

給定兩個大小為 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 尋找兩個有序陣列的中位數

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