/*
尋找兩個有序數組的中位數
給定兩個大小爲 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
*/
/*
本身實現的只是簡單代碼.
分治解法 : https://blog.csdn.net/hk2291976/article/details/51107778
*/
1 class Solution4 { 2
3 public double findMedianSortedArrays(int[] nums1, int[] nums2) { 4 int sumLength = nums1.length + nums2.length; 5 int pos1 = 0; 6 int pos2 = 0; 7 int currPos = 0; 8 double[] arr = new double[(sumLength >> 1) + 1]; 9
10 while (currPos < ((nums1.length + nums2.length >> 1) + 1)) { 11 if (pos1 == nums1.length) { 12 arr[currPos] = nums2[pos2++]; 13 } else if (pos2 == nums2.length) { 14 arr[currPos] = nums1[pos1++]; 15 } else if (nums1[pos1] < nums2[pos2]) { 16 arr[currPos] = nums1[pos1++]; 17 } else { 18 arr[currPos] = nums2[pos2++]; 19 } 20 ++currPos; 21 } 22 if ((sumLength & 1) == 1) { 23 return arr[currPos - 1]; 24 } else { 25 return (arr[currPos - 1] + arr[currPos - 2]) / 2; 26 } 27 } 28 }