| 1 | public class Solution { |
| 2 | public double findMedianSortedArrays(int[] nums1, int[] nums2) { |
| 3 | // ʹnums1��Ϊ�϶�����,��������������ٶ�,ͬʱ���Ա���һЩ�߽����� |
| 4 | if (nums1.length > nums2.length) { |
| 5 | int[] temp = nums1; |
| 6 | nums1 = nums2; |
| 7 | nums2 = temp; |
| 8 | } |
| 9 | |
| 10 | int len1 = nums1.length; |
| 11 | int len2 = nums2.length; |
| 12 | int leftLen = (len1 + len2 + 1) / 2; //������ϲ�&�����,���ߵij��� |
| 13 | |
| 14 | // ������1���ж��ּ��� |
| 15 | int start = 0; |
| 16 | int end = len1; |
| 17 | while (start <= end) { |
| 18 | // ��������ı�����A,B��λ��(��1��ʼ����) |
| 19 | // count1 = 2 ��ʾ num1 ����ĵ�2������ |
| 20 | // ��index��1 |
| 21 | int count1 = start + ((end - start) / 2); |
| 22 | int count2 = leftLen - count1; |
| 23 | |
| 24 | if (count1 > 0 && nums1[count1 - 1] > nums2[count2]) { |
| 25 | // A��B��next��Ҫ�� |
| 26 | end = count1 - 1; |
| 27 | } else if (count1 < len1 && nums2[count2 - 1] > nums1[count1]) { |
| 28 | // B��A��next��Ҫ�� |
| 29 | start = count1 + 1; |
| 30 | } else { |
| 31 | // ��ȡ��λ�� |
| 32 | int result = (count1 == 0)? nums2[count2 - 1]: // ��num1������������������ұ� |
| 33 | (count2 == 0)? nums1[count1 - 1]: // ��num2������������������ұ� |
| 34 | Math.max(nums1[count1 - 1], nums2[count2 - 1]); // �Ƚ�A,B |
| 35 | if (isOdd(len1 + len2)) { |
| 36 | return result; |
| 37 | } |
| 38 | |
| 39 | // ����ż����������� |
| 40 | int nextValue = (count1 == len1) ? nums2[count2]: |
| 41 | (count2 == len2) ? nums1[count1]: |
| 42 | Math.min(nums1[count1], nums2[count2]); |
| 43 | return (result + nextValue) / 2.0; |
| 44 | } |
| 45 | } |
| 46 | |
| 47 | return Integer.MIN_VALUE; // ���Ե��������� |
| 48 | } |
| 49 | |
| 50 | // ��������true,ż������false |
| 51 | private boolean isOdd(int x) { |
| 52 | return (x & 1) == 1; |
| 53 | } |
| 54 | } |
nothing calls this directly
no outgoing calls
no test coverage detected