leetcode链接:
https://leetcode.cn/problems/median-of-two-sorted-arrays/description/
方案一
暴力求解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| int[] flag = new int[nums1.length + nums2.length];
for (int i = 0; i < nums1.length; i++) { flag[i] = nums1[i]; }
for (int i = 0; i < nums2.length; i++) { flag[nums1.length + i] = nums2[i]; }
Arrays.sort(flag);
if ((flag.length % 2) == 1) { return flag[flag.length / 2]; } else { return (flag[flag.length / 2] + flag[(flag.length / 2) -1]) / 2.0; }
|
执行结果:
- 2094/2094 cases passed (3 ms)
- Your runtime beats 21.6 % of java submissions
- Your memory usage beats 66.55 % of java submissions (42.2 MB)
几乎最优方案
https://leetcode.cn/problems/median-of-two-sorted-arrays/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by-w-2/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| class Solution { public double findMedianSortedArrays(int[] A, int[] B) { int m = A.length; int n = B.length; if (m > n) { return findMedianSortedArrays(B,A); } int iMin = 0, iMax = m; while (iMin <= iMax) { int i = (iMin + iMax) / 2; int j = (m + n + 1) / 2 - i; if (j != 0 && i != m && B[j-1] > A[i]){ iMin = i + 1; } else if (i != 0 && j != n && A[i-1] > B[j]) { iMax = i - 1; } else { int maxLeft = 0; if (i == 0) { maxLeft = B[j-1]; } else if (j == 0) { maxLeft = A[i-1]; } else { maxLeft = Math.max(A[i-1], B[j-1]); } if ( (m + n) % 2 == 1 ) { return maxLeft; }
int minRight = 0; if (i == m) { minRight = B[j]; } else if (j == n) { minRight = A[i]; } else { minRight = Math.min(B[j], A[i]); }
return (maxLeft + minRight) / 2.0; } } return 0.0; } }
作者:windliang 链接:https: 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
|