这是我参与8月更文挑战的第19天,活动详情查看:8月更文挑战
前言
今天来一道数组相关的题目,寻找数组中的中位数,本题的思路不是很难,本文主要是给前端开发人员来个JavaScript版本的解题方法,本解题方法用到了es6中的新特性,具体思路及代码如下
题目描述
给定两个大小分别为m和n的正序(从小到大)数组nums1和nums2。请你找出并返回这两个正序数组的中位数 。
示例 1:
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
示例 2:
输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
示例 3:
输入:nums1 = [0,0], nums2 = [0,0]
输出:0.00000
示例 4:
输入:nums1 = [], nums2 = [1]
输出:1.00000
示例 5:
输入:nums1 = [2], nums2 = []
输出:2.00000
解题思路
- 本题输入的是两个数组,我们要求的是两个数组合并之后的数组的中位数,并且是要排序好的数组的中位数,因为输入的是正序数组,这里我们可以使用归并来获得合并之后的数组,归并的思路可以看这个题目,本文是直接用的sort进行排序。
- 得到排序后的数组之后有两种情况,如果数组的项是单数的话,那么中位数的下标就是数组长度除以2取地板,如果数组的项是双数,那么中位数就是下标为数组长度除以2的项和前一项的和除以2
- 根据不同的情况return 出结果即可,代码如下
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number}
*/
var findMedianSortedArrays = function(nums1, nums2) {
var mergeArr = []
var medianIndex = 0
mergeArr = [...nums1,...nums2].sort((a,b) => a-b) //这里用es6中的展开运算符合并两个数组,并用sort进行排序得到合并后的有序数组
if(mergeArr.length%2===1){ //合并数组长度为奇数的情况
medianIndex = Math.floor(mergeArr.length/2)
return mergeArr[medianIndex]
}else{ //合并数组为双数的情况
var median1 = mergeArr.length/2
var median2 = median1-1
return (mergeArr[median1]+mergeArr[median2])/2
}
};
LeetCode运行结果
总结
本题是一道简单是数组取中位数的题目,主要是分为两种情况,要考虑清楚,其次是合并数组的方法,可以用普通的数组方法concat,也可以用es6的展开运算法。大致就是这样,如有高见欢迎评论指出,gogogo