Median of Two Sorted Arrays(两个排序数组的中位数)】

【004-Median of Two Sorted Arrays(两个排序数组的中位数)】原题

  There are two sorted arrays nums1 and nums2 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)).

题目大意

  两个排序数组,找这两个排序数组的中位数,,时间复杂度为O(log(m+n))

解题思路

  采用类二分查找算法

代码实现{/*** 004-Median of Two Sorted Arrays(两个排序数组的中位数)** @param nums1* @param nums2* @return*/(int[] nums1, int[] nums2) {if (nums1 == null) {nums1 = new int[0];}if (nums2 == null) {nums2 = new int[0];}int len1 = nums1.length;int len2 = nums2.length;if (len1 < len2) {// 确保第一个数组比第二个数组长度大return findMedianSortedArrays(nums2, nums1);}// 如果长度小的数组长度为0,就返回前一个数组的中位数if (len2 == 0) {return (nums1[(len1 – 1) / 2] + nums1[len1 / 2]) / 2.0;}int lo = 0;int hi = len2 * 2;int mid1;int mid2;double l1;double l2;double r1;double r2;while (lo <= hi) {mid2 = (lo + hi) / 2;mid1 = len1 + len2 – mid2;l1 = (mid1 == 0) ? Integer.MIN_VALUE : nums1[(mid1 – 1) / 2];l2 = (mid2 == 0) ? Integer.MIN_VALUE : nums2[(mid2 – 1) / 2];r1 = (mid1 == len1 * 2) ? Integer.MAX_VALUE : nums1[mid1 / 2];r2 = (mid2 == len2 * 2) ? Integer.MAX_VALUE : nums2[mid2 / 2];if (l1 > r2) {lo = mid2 + 1;} else if (l2 > r1) {hi = mid2 – 1;} else {return (Math.max(l1, l2) + Math.min(r1, r2)) / 2;}}return -1;}}评测结果

  点击图片,鼠标不释放,拖动一段位置,释放后在新的窗口中查看完整图片。

特别说明欢迎转载,转载请注明出处【】

看了哪些风景,遇到哪些人。尽管同学说,

Median of Two Sorted Arrays(两个排序数组的中位数)】

相关文章:

你感兴趣的文章:

标签云: