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

合并两个升序数组为新升序数组:我的Python函数存在什么遗漏?

你的代码存在三个关键问题

问题1:满足el > ins[c]时,未将当前el加入结果

当处理main中的元素el且el大于ins[c]时,代码只插入了ins中符合条件的元素,但没有把当前的el添加到结果列表。比如示例中的8会被跳过,不会出现在最终结果里。

问题2:内部循环错误遍历整个ins列表

你在处理el > ins[c]时,用for j, ins_el in enumerate(ins)遍历了整个ins,而非从当前指针c的位置开始。这会导致重复处理已经添加过的元素,比如示例中处理12时,会重新把5再添加一遍,造成结果重复。

问题3:未处理main遍历完成后ins中剩余的元素

如果ins中存在比main所有元素都大的元素(比如ins是[13,14]),当main遍历完后,这些元素根本不会被加入结果列表。


修正后的代码(双指针写法)

用双指针分别遍历两个有序列表,每次取较小的元素加入结果,最后拼接剩余元素,这是合并两个有序列表的标准高效写法:

def insarrintomain(main, ins):
    i = j = 0
    result = []
    # 同时遍历两个列表,取较小元素加入结果
    while i < len(main) and j < len(ins):
        if main[i] <= ins[j]:
            result.append(main[i])
            i += 1
        else:
            result.append(ins[j])
            j += 1
    # 拼接main中剩余的元素
    result.extend(main[i:])
    # 拼接ins中剩余的元素
    result.extend(ins[j:])
    return result

测试你的示例:

main = [1, 2, 3, 4, 8, 9, 12]
ins = [5, 6, 7, 10]
print(insarrintomain(main, ins))  # 输出: [1,2,3,4,5,6,7,8,9,10,12]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:36:43