题解 | #在两个长度相等的排序数组中找到上中位数#
在两个长度相等的排序数组中找到上中位数
https://www.nowcoder.com/practice/6fbe70f3a51d44fa9395cfc49694404f?tpId=365&tqId=1008512&ru=/exam/oj&qru=/ta/spring-deliver-2024/question-ranking&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D365
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * find median in two sorted array * @param arr1 int整型一维数组 the array1 * @param arr2 int整型一维数组 the array2 * @return int整型 */ function findMedianinTwoSortedAray( arr1 , arr2 ) { // write code here const length = (arr1.length + arr2.length)/2; const list = []; arr1.forEach((item) => { list.push(item); }) arr2.forEach((item) => { list.push(item); }) list.sort((a,b) => a-b); return list[length -1 ]; } module.exports = { findMedianinTwoSortedAray : findMedianinTwoSortedAray };
思路:
题目要求的是,找到两个数组的上中位数,如果数组的位数为8位,则找到第4小的的数据,进行返回即可。
第一步:将两个数组的长度加起来,除以2,拿到需要返回的数字的位数k。
第二步:将两个数组合并起来,得到一个新数组list。并且将数组进行升序排序。这里需要注意,上中位数指的是,中间小的数据,所以必须进行排序。
第三步:直接返回新数组list中,第k个数据。这里容易出错,结果不是返回list[k],而是返回list[k-1],因为数字下标是从0开始的,第k个数据,在数组中的下标是k-1。