+
95
-

回答

要合并两个从小到大排好序的数组,并保持合并结果从小到大的顺序,可以使用双指针法。这种方法的时间复杂度为 O(m+n),其中 m 和 n 分别是两个数组的长度。

以下是实现该算法的 JavaScript 代码:

function mergeSortedArrays(arr1, arr2) {
  let mergedArray = [];
  let i = 0, j = 0;

  // 遍历两个数组,直到其中一个数组的所有元素都被处理完
  while (i < arr1.length && j < arr2.length) {
    if (arr1[i] <= arr2[j]) {
      mergedArray.push(arr1[i]);
      i++;
    } else {
      mergedArray.push(arr2[j]);
      j++;
    }
  }

  // 如果 arr1 还有剩余元素,将其全部添加到 mergedArray 中
  while (i < arr1.length) {
    mergedArray.push(arr1[i]);
    i++;
  }

  // 如果 arr2 还有剩余元素,将其全部添加到 mergedArray 中
  while (j < arr2.length) {
    mergedArray.push(arr2[j]);
    j++;
  }

  return mergedArray;
}

// 示例
const arr1 = [1, 3, 8];
const arr2 = [2, 3, 9];
const mergedArray = mergeSortedArrays(arr1, arr2);
console.log(mergedArray); // 输出: [1, 2, 3, 8, 9]
解释初始化:创建一个空数组 mergedArray 用于存储合并后的结果,并初始化两个指针 i 和 j 分别指向两个输入数组的起始位置。遍历两个数组:使用 while 循环遍历两个数组,直到其中一个数组的元素全部被处理完。在每次循环中,比较两个指针所指向的元素,将较小的元素添加到 mergedArray 中,并将相应的指针向后移动一位。处理剩余元素:如果其中一个数组的所有元素已经处理完,而另一个数组还有剩余元素,则将剩余元素全部添加到 mergedArray 中。返回结果:最后返回合并后的数组 mergedArray。

这种方法确保了每个元素只被比较一次,因此时间复杂度为 O(m+n)。

网友回复

我知道答案,我要回答