File tree 1 file changed +18
-35
lines changed
1 file changed +18
-35
lines changed Original file line number Diff line number Diff line change 1
1
class Solution {
2
2
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 );
29
5
}
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 ;
35
21
}
36
22
}
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 ;
41
24
}
42
25
}
You can’t perform that action at this time.
0 commit comments