給定兩個大小為 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...