Problem
There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).
Idea1
- If m+n is old (奇数), the median is the number located in position (m+n)/2 of the array (A+B)
- If m+n is even (偶数), the median is the average of element in (m+n)/2 -1 and element in (m+n)/2
- So you need to judge if the m+n is old or even. Then, The problem is find the kth biggest element in array(A+B).
- After you decide the old and even of m+n, the idea of solution is to find the kth element in the array (A+B).
Idea2
- The idea is like Merge operation in CLRS. Retrieve the minimal element in A[] and B[] until you reach the median (Maybe two numbers for even case). Complexity is O(m+n)
- We need to carefully treat the cases when A[] is empty or B[] is empty at the beginning
- Use two parameter "front" , "rear" to record two elements for even case. And "rear" for old case.
- During the procedure to find the minimal element in A[]+B[]. You may meet the following cases
- Either A[] or B[] become empty, we just use the other sequence
- If A[] and B[] are non-empty, we will choose the smaller one.
Solution
This solution is for Idea2:
No comments:
Post a Comment