-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMedianOfTwoSortArray.java
More file actions
57 lines (45 loc) · 1.43 KB
/
MedianOfTwoSortArray.java
File metadata and controls
57 lines (45 loc) · 1.43 KB
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
public class MedianOfTwoSortArray {
int binary_K(int A[], int B[], int ni, int nj, int K)
{
int left = 0, right = ni - 1;
K--; //we need to find the K-- which is less than A[mid]
while(right >= left){
int mid = (left + right) / 2;
if( K - mid < 0){
right = mid - 1;
}else if(K - mid > nj || (K - mid - 1) >= 0 && B[K - mid - 1] > A[mid]){
left = mid + 1;
}else if(K - mid < 0 || K - mid < nj && B[K - mid] < A[mid]){
right = mid - 1;
}else {
return mid;
}
}
return -1;
}
int find_K_2(int A[], int B[], int lenA, int lenB, int K)
{
assert(K > 0 && K <= lenA + lenB);
int i;
if((i = binary_K(A, B, lenA, lenB, K)) >= 0)
return A[i];
return B[binary_K(B, A, lenB, lenA, K)];
}
public double findMedianSortedArrays(int A[], int B[]) {
// Start typing your Java solution below
// DO NOT write main() function
int len = A.length + B.length;
if(len % 2 == 1){
return find_K_2(A, B, A.length, B.length, (len + 1) /2);
}
int median1 = find_K_2(A, B, A.length, B.length, (len + 1) /2);
int median2 = find_K_2(A, B, A.length, B.length, (len + 2) /2);
return (median1 * 1.0 + median2) / 2;
}
public static void main(String[] args){
int[] A = {3,5};
int[] B = {1,2,4,6,7};
MedianOfTwoSortArray mosa = new MedianOfTwoSortArray();
System.out.println(mosa.findMedianSortedArrays(A, B));
}
}