返回

用JavaScript寻找两个有序数组的中位数

前端

算法思路

寻找两个有序数组的中位数,可以采用以下步骤:

  1. 将两个数组合并成一个新的数组。
  2. 对合并后的数组进行排序。
  3. 取排序后数组的中间元素作为中位数。

实现步骤

  1. 首先,将两个数组合并成一个新的数组。可以使用JavaScript的concat()方法来完成这一步。
const arr1 = [1, 3, 5];
const arr2 = [2, 4, 6];

const mergedArr = arr1.concat(arr2);
  1. 接下来,对合并后的数组进行排序。可以使用JavaScript的sort()方法来完成这一步。
mergedArr.sort((a, b) => a - b);
  1. 最后,取排序后数组的中间元素作为中位数。如果数组的长度是偶数,那么中位数是两个中间元素的平均值。如果数组的长度是奇数,那么中位数就是中间元素本身。
const midIndex = Math.floor(mergedArr.length / 2);
const median = mergedArr[midIndex];

示例代码

function findMedian(arr1, arr2) {
  // 合并两个数组
  const mergedArr = arr1.concat(arr2);

  // 对合并后的数组进行排序
  mergedArr.sort((a, b) => a - b);

  // 取排序后数组的中间元素作为中位数
  const midIndex = Math.floor(mergedArr.length / 2);
  const median = mergedArr[midIndex];

  return median;
}

// 测试用例
const arr1 = [1, 3, 5];
const arr2 = [2, 4, 6];

const median = findMedian(arr1, arr2);

console.log(median); // 输出:3.5

技巧

  1. 在合并两个数组时,可以使用扩展运算符(...)来简化代码。
const mergedArr = [...arr1, ...arr2];
  1. 在对数组进行排序时,可以使用箭头函数来简化代码。
mergedArr.sort((a, b) => a - b);
  1. 在取排序后数组的中间元素时,可以使用Math.floor()方法来确保取到整数索引。
const midIndex = Math.floor(mergedArr.length / 2);