HOT100——寻找两个正序数组的中位数(JS实现)
原创
©著作权归作者所有:来自51CTO博客作者wb59770b05237ae的原创作品,请联系作者获取转载授权,否则将追究法律责任
题目描述
解题思路
- 本题采用双指针的解题方法。
- 一个指针指向数组1。
- 一个指针指向数组2。
- 依次比较两个指针指向的元素的大小,谁小谁加到排序好的数组中,直到一方遍历完,将没遍历完的全部加到排序好的数组中即可。
- 最后判断结果数组的个数是奇数还是偶数,如果是奇数直接返回中位数元素,如果是偶数则返回中位数元素和中位数元素后边的一位元素,两者求和然后/2,返回。
解题代码
var findMedianSortedArrays = function(nums1, nums2) {
// 首先我们要明确一点,两个数组都是正序的
// 双指针
let left = 0;
let right = 0;
// 定义合并数组
const mergeArr = [];
// 当其中一个数组遍历到最后时结束
while (left < nums1.length && right < nums2.length) {
if (nums1[left] <= nums2[right]) {
mergeArr.push(nums1[left]);
left++;
} else {
mergeArr.push(nums2[right]);
right++;
}
}
if (right === nums2.length) {
mergeArr.push(...nums1.slice(left))
}
if (left === nums1.length) {
mergeArr.push(...nums2.slice(right))
}
if (mergeArr.length % 2) {
return mergeArr[(mergeArr.length-1) >> 1]
} else {
return (mergeArr[(mergeArr.length-1) >> 1] + mergeArr[((mergeArr.length-1) >> 1) + 1]) / 2
}
};
总结(本题给我们的启示思路)
- 学会使用双指针的思路求解问题。
- 学会使用位移的方式求中位数。