找出有序数组的中位数 | 刷题打卡

283 阅读1分钟

本文正在参与掘金团队号上线活动,点击 查看大厂春招职位

一、题目描述:

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log(m+n))。

示例1:
nums1 = [1, 3]
nums2 = [2]
// 中位数2.0
示例2:
nums1 = [1, 2]
nums2 = [3, 4]
// 中位数是(2 + 3) / 2 = 2.5

二、思路分析:

首先要知道什么是中位数

中位数:中位数是在一列顺序排列的数的 "正中" ,要找中位数,把数按大小次序排列,然后找正中位置。

思路就是数组合并排序找正中位置;不过设计到时间复杂度,这个就比较恶心了,用了sort就不符合规则,

那么什么是时间复杂度呢?

时间复杂度:代码的时间复杂度指的是大O符号表示法 ;

归并排序和二分法都属于时间复杂度为O(log(m+n)),那么我们的解法就是用归并排序和二分法来答题就好啦

三、AC 代码:

      function findMedianSortedArrays(arr1, arr2) {
        let arr = [];
        while (arr1.length && arr2.length) {
          if (arr1[0] < arr2[0]) {
            arr.push(arr1.shift());
          } else {
            arr.push(arr2.shift());
          }
        }
        arr = arr.concat(arr1, arr2);
        let median;
        if (arr.length % 2) {
          median = arr[Math.floor(arr.length / 2)];
        } else {
          var m = arr.length / 2;
          median = (arr[m - 1] + arr[m]) / 2;
        }
        return median;
      }
      findMedianSortedArrays([1, 2], [3, 4]);
      

四、总结:

试着参加掘金活动打个卡;