这是我的一个解题思路:可以理解为双指针(小白,错了的话理解万岁)
题目
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
解题思路
- 首先给两个数组都添加一个最大值结尾,排除一些特例情况,保证所有的输入数组都是
正常的
。 - 然后再用for循环去比较两个数组当前位置上值的大小,声明两个指针
z
,j
;如果nums1[z]
小于nums2[i]
,则push进去newArry数组,且更新z的值z++
; - 对于
nums1[z]
不小于nums2[i]
的情况,做同样操做即可,继续进入下一轮比较。 - 最后需要判断,当
newArr
的长度为1的话,直接返回newArr[0]
代码演示
var findMedianSortedArrays = function(nums1, nums2) {
let len = nums1.length + nums2.length
nums1.push(Infinity)
nums2.push(Infinity)
//计算总长度
//合并两个数组
let newArr = []
//声明一个当前比较值
for (let i = 0, z = 0, j = 0; i < len; i++) {
if (nums1[z] < nums2[j]) {
newArr.push(nums1[z])
z++
}
else {
newArr.push(nums2[j])
j++
}
}
if(len<2){
return newArr[0]
}
//计算出中位数的位置
let middleNum = len % 2 ? newArr[Math.floor(len / 2)] : (newArr[len / 2] + newArr[(len / 2) - 1]) / 2
return middleNum
};
如有错误,请各位大佬指出