Skip to content

Commit e3ef07b

Browse files
committed
Updated Median of Two Sorted Arrays
1 parent 20bbc57 commit e3ef07b

File tree

1 file changed

+18
-35
lines changed

1 file changed

+18
-35
lines changed

Hard/Median of Two Sorted Arrays.java

Lines changed: 18 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,25 @@
11
class Solution {
22
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
3-
int n = nums1.length + nums2.length;
4-
ArrayList<Integer> arr = new ArrayList<>();
5-
6-
int i = 0;
7-
int j = 0;
8-
int k = 0;
9-
int limit = (n)/2 + 1;
10-
11-
while (i < nums1.length && j < nums2.length && k < limit) {
12-
if (nums1[i] < nums2[j]) {
13-
arr.add(nums1[i]);
14-
i++;
15-
}
16-
else {
17-
arr.add(nums2[j]);
18-
j++;
19-
}
20-
k++;
21-
}
22-
23-
if (i < nums1.length) {
24-
while (i < nums1.length && k < limit) {
25-
arr.add(nums1[i]);
26-
i++;
27-
k++;
28-
}
3+
if (nums1.length < nums2.length) {
4+
return findMedianSortedArrays(nums2, nums1);
295
}
30-
else {
31-
while (j < nums2.length && k < limit) {
32-
arr.add (nums2[j]);
33-
j++;
34-
k++;
6+
int low = 0;
7+
int high = nums2.length * 2;
8+
while (low <= high) {
9+
int midTwo = (low + high) / 2;
10+
int midOne = nums1.length + nums2.length - midTwo;
11+
double leftOne = (midOne == 0) ? Integer.MIN_VALUE : nums1[(midOne - 1) / 2];
12+
double leftTwo = (midTwo == 0) ? Integer.MIN_VALUE : nums2[(midTwo - 1) / 2];
13+
double rightOne = (midOne == nums1.length * 2) ? Integer.MAX_VALUE : nums1[(midOne) / 2];
14+
double rightTwo = (midTwo == nums2.length * 2) ? Integer.MAX_VALUE : nums2[(midTwo) / 2];
15+
if (leftOne > rightTwo) {
16+
low = midTwo + 1;
17+
} else if (leftTwo > rightOne) {
18+
high = midTwo - 1;
19+
} else {
20+
return (Math.max(leftOne, leftTwo) + Math.min(rightOne, rightTwo)) / 2;
3521
}
3622
}
37-
38-
k--;
39-
40-
return n%2 == 0 ? (double) (arr.get(k - 1) + arr.get(k)) / 2.0 : (double) arr.get(k);
23+
return -1;
4124
}
4225
}

0 commit comments

Comments
 (0)