本文正在参与掘金团队号上线活动,点击 查看大厂春招职位
一、题目描述:
给定两个大小为 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]);
四、总结:
试着参加掘金活动打个卡;