1. 程式人生 > >LeetCode 第4題 尋找有序數組的中位數

LeetCode 第4題 尋找有序數組的中位數

lee 時間復雜度 col 會同 ted return 時間 EDA etc


/*
尋找兩個有序數組的中位數

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

LeetCode 第4題 尋找有序數組的中位數