中位数计算题(求中位数的题)

图片授权基于 www.pixabay.com 相关协议

什么是中位数?

中位数(Median)又称中值,是按顺序排列的一组数据中居于中间位置的数。对于有限的数集,可以通过把所有观察值高低排序后找出正中间的一个作为中位数。如果观察值有偶数个,通常取最中间的两个数值的平均数作为中位数。
来,看道题…
题目:4. 寻找两个正序数组的中位数
难度:困难
链接:
https://leetcode-cn.com/problems/median-of-two-sorted-arrays/
内容:给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log (m+n)) 。
题目看上去,就想让用「双指针」去解,但解到一半,就明白了,其实可以不用双指针。
var findMedianSortedArrays = function (nums1, nums2) {    const mergeArr = nums1.concat(nums2);    const result = mergeArr.sort((a, b) => a - b)        //如果长度只有1,则直接返回    if (result.length === 1) return result[0]        //双指针计算数组    let len = (result.length - 1) / 2;        //如果是整数    if (len % 1 === 0) {        return result[len]    } else {        const smallNumber = Math.floor(len);        const bigNumber = Math.ceil(len);        return (result[smallNumber] + result[bigNumber]) / 2    }};

首先,用 concat 把两个数组合并了,然后通过 sort 从小到大排了个序。个人认为 concat 和 sort 都算是 log 的时间复杂度。

判断合并后的数组长度为1,则直接返回当前值,并且计算合并数组的下标的中位数,算出下标的中位数。

下标中位数如果取余 1 为 0,则说明这是一个整数,如果不为 0 则说明是一个浮点数,把浮点数上下取整,并相加除2,就是中位数的值。

参考资料:
https://leetcode-cn.com/problems/median-of-two-sorted-arrays/
https://baike.baidu.com/item/%E4%B8%AD%E4%BD%8D%E6%95%B0/3087401

原创文章,作者:小道研究,如若转载,请注明出处:https://www.sudun.com/ask/34631.html

(0)
小道研究's avatar小道研究
上一篇 2024年4月13日 上午11:23
下一篇 2024年4月13日 上午11:25

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注