You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按索引最优合并数组?指定场景实现方案问询

按索引/规则最优合并数组的两种场景解决方案

嘿,我来帮你搞定这个数组合并的问题!从你给出的两个例子来看,其实是两种不同的合并需求,我会分别给出最优时间复杂度的实现方案,兼顾效率和可读性~

场景1:合并两个有序数组为一个有序数组

第一个例子里的数字数组都是有序的,合并后要保持整体有序,这种场景下最优的方法是双指针法,时间复杂度是O(m+n)(m、n分别是两个数组的长度),比先拼接再排序的O((m+n)log(m+n))高效得多。

实现代码(JavaScript)

function mergeSortedArrays(a, b) {
  const merged = [];
  let i = 0, j = 0;
  
  // 同时遍历两个数组,每次取较小的元素加入结果
  while (i < a.length && j < b.length) {
    if (a[i] < b[j]) {
      merged.push(a[i]);
      i++;
    } else {
      merged.push(b[j]);
      j++;
    }
  }
  
  // 把剩下的元素直接追加(因为数组本身有序,剩下的肯定都比结果里的大)
  while (i < a.length) {
    merged.push(a[i]);
    i++;
  }
  while (j < b.length) {
    merged.push(b[j]);
    j++;
  }
  
  return merged;
}

// 测试示例
var a = [1, 3, 5, 7];
var b = [2, 4, 6];
var c = mergeSortedArrays(a,b); 
console.log(c); // 输出: [1, 2, 3, 4, 5, 6, 7]

场景2:按索引交替合并数组

第二个例子是按索引交替取元素,也就是先取a[0],再取b[0],接着a[1],b[1]...直到其中一个数组遍历完,再把剩下的元素全部追加到结果里。这种场景的最优解法是遍历到两个数组中长度较大的那个的长度,逐个处理每个索引的元素,时间复杂度是O(max(m,n))。

实现代码(JavaScript)

function mergeAlternately(a, b) {
  const merged = [];
  const maxLength = Math.max(a.length, b.length);
  
  for (let k = 0; k < maxLength; k++) {
    // 如果当前索引在a的范围内,就加入a的元素
    if (k < a.length) {
      merged.push(a[k]);
    }
    // 如果当前索引在b的范围内,就加入b的元素
    if (k < b.length) {
      merged.push(b[k]);
    }
  }
  
  return merged;
}

// 测试示例
var a = ["string1", "string2"];
var b = ["string3"];
var c = mergeAlternately(a,b); 
console.log(c); // 输出: ["string1", "string3", "string2"]

补充说明

如果你的需求是要根据数组类型自动判断用哪种合并方式(比如数字数组用有序合并,其他用交替合并),可以在函数里加个类型判断逻辑,比如检查数组元素是否都是数字:

function merge(a, b) {
  // 判断是否都是数字数组
  const isNumericArray = (arr) => arr.every(item => typeof item === 'number');
  if (isNumericArray(a) && isNumericArray(b)) {
    return mergeSortedArrays(a, b);
  } else {
    return mergeAlternately(a, b);
  }
}

内容的提问来源于stack exchange,提问作者user3055938

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:08:57