2018-11-29 寻找两个有序数组的中位数

题目:

4. 寻找两个有序数组的中位数

解法:

解法一:
最简单的办法就是合并两个有序数组, 因为数组有序, 所以很容易合并起来, 时间复杂度O(m+n);
然后取中位数即可.

public double findMedianSortedArrays(int[] nums1, int[] nums2) {
    int len1 = nums1 != null ? nums1.length : 0;
    int len2 = nums2 != null ? nums2.length : 0;
    // 假设合并后的数组的长度
    int len = len1 + len2;
    int[] arr = new int[len];
    int index = 0;
    int i1 = 0;
    int i2 = 0;
    while (i1 < len1 && i2 < len2) {
        arr[index++] = nums1[i1] < nums2[i2] ? nums1[i1++] : nums2[i2++];
    }
    while (i1 < len1) {
        arr[index++] = nums1[i1++];
    }
    while (i2 < len2) {
        arr[index++] = nums2[i2++];
    }

    // 合并后的数组求 中位数
    double midNum = 0.0;
    if (len % 2 == 0) {
        // 偶数
        int mid = len / 2 - 1;
        midNum = (arr[mid] + arr[mid + 1]) / 2.0;
    } else {
        // 奇数
        int mid = len / 2;
        midNum = (double) (arr[mid]);
    }
    return midNum;
}

但是, 并不符合题目要求的时间复杂度 O(log(m + n)).
解法二:
见官方解答

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问题描述: 给定两个大小为 m 和 n 的有序数组nums1和nums2。 请找出这两个有序数组的中位数。要求算法...
    会九卦的兔子阅读 1,438评论 0 1
  • 当我们在现实生活中看到陷阱时,我们的判断力就会起作用,选择避开但是当陷阱被冠以“机会”之名现在让你面前的时候,你往...
    感想心得阅读 1,491评论 2 5
  • 基本功还得自己做。 这样说,今年写够100篇,我就重新开一个写字的公众号
    cclynn阅读 287评论 0 0
  • 北爱里面说 爱情是什么东西,谁都听过,但是谁都没见过。 在从你的全世界路过里,陈沫说 :爱情,就是因为爱搞出了好多...
    心志无予阅读 398评论 0 0
  • 月,寂静无声,是最美的音乐; 月,不慕繁华,是淡泊的君子; 月,光照古今,是清澈的诗行; 月,皎洁如初,是天外的高士。
    林夕敬阅读 485评论 6 3