C语言版
double find_kth(int* nums1, int nums1Size, int* nums2, int nums2Size, int k, int c) { if (0 == nums1Size) { if (0 == c) return nums2[k - 1]; else return (nums2[k - 1] + nums2[k]) / 2.0; } if (0 == nums2Size) { if (0 == c) return nums1[k - 1]; else return (nums1[k - 1] + nums1[k]) / 2.0; } if (k == 1) { if (*nums1 < *nums2) { if (0 == c) return *nums1; else return (*nums1 + find_kth(nums1 + 1, nums1Size - 1, nums2, nums2Size, 1, 0)) / 2.0; } else { if (0 == c) return *nums2; else return (*nums2 + find_kth(nums1, nums1Size, nums2 + 1, nums2Size - 1, 1, 0)) / 2.0; } } int i1 = k / 2 - 1; if (i1 >= nums1Size) i1 = nums1Size - 1; int i2 = k - 2 - i1; if (i2 >= nums2Size) { i2 = nums2Size - 1; i1 = k - 2 - i2; } if (nums1[i1] == nums2[i2]) { if (0 == c) return nums1[i1]; else return (nums1[i1] + find_kth(nums1 + i1 + 1, nums1Size - i1 - 1, nums2 + i2 + 1, nums2Size - i2 - 1, 1, 0)) / 2.0; } else if (nums1[i1] < nums2[i2]) { return find_kth(nums1 + i1 + 1, nums1Size - i1 - 1, nums2, nums2Size, k - i1 - 1, c); } else { return find_kth(nums1, nums1Size, nums2 + i2 + 1, nums2Size - i2 - 1, k - i2 - 1, c); } } double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) { if (0 == ((nums1Size + nums2Size) & 0x1)) return find_kth(nums1, nums1Size, nums2, nums2Size, (nums1Size + nums2Size) / 2 , 1); return find_kth(nums1, nums1Size, nums2, nums2Size, (nums1Size + nums2Size) / 2 + 1, 0); }
时间: 2024-10-10 13:00:31