Skip to content

Commit b053be5

Browse files
committed
pass problem 4 - median of two sorted arrays
1 parent 8ba976d commit b053be5

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package binary_search.median_of_two_sorted_arrays;
2+
3+
/**
4+
* @author Bota5ky
5+
* @link <a href="https://leetcode.cn/problems/median-of-two-sorted-arrays/">4. 寻找两个正序数组的中位数</a>
6+
* @since 2023-11-03 14:47
7+
*/
8+
class Solution {
9+
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
10+
int len1 = nums1.length;
11+
int len2 = nums2.length;
12+
var odd = findKth(nums1, 0, len1 - 1, nums2, 0, len2 - 1, (len1 + len2 + 1) / 2);
13+
var even = findKth(nums1, 0, len1 - 1, nums2, 0, len2 - 1, (len1 + len2 + 2) / 2);
14+
return (odd + even) / 2.0;
15+
}
16+
17+
private int findKth(int[] nums1, int start1, int end1, int[] nums2, int start2, int end2, int k) {
18+
var len1 = end1 - start1 + 1;
19+
var len2 = end2 - start2 + 1;
20+
if (len1 > len2) {
21+
return findKth(nums2, start2, end2, nums1, start1, end1, k);
22+
}
23+
if (len1 == 0) {
24+
return nums2[start2 + k - 1];
25+
}
26+
if (k == 1) {
27+
return Math.min(nums1[start1], nums2[start2]);
28+
}
29+
var i = start1 + Math.min(len1, k / 2) - 1;
30+
var j = start2 + Math.min(len2, k / 2) - 1;
31+
if (nums1[i] > nums2[j]) {
32+
return findKth(nums1, start1, end1, nums2, j + 1, end2, k - (j + 1 - start2));
33+
} else {
34+
return findKth(nums1, i + 1, end1, nums2, start2, end2, k - (i + 1 - start1));
35+
}
36+
}
37+
}

0 commit comments

Comments
 (0)