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

C#合并有序列表问题:代码输出结果异常求助

解决有序列表合并的错误问题

嘿,我来帮你搞定这个合并有序列表的问题!首先咱们明确核心要求:用双指针法实现(时间复杂度O(n+m),比拼接后排序的O((n+m)log(n+m))效率更高),你的输出出现[1,2,3,4,5,5]而非正确结果[1,2,3,4,5,6],大概率是指针移动逻辑或边界处理出了问题。

正确的双指针实现代码

def merge_sorted_lists(list1, list2):
    merged = []
    i = j = 0  # 两个指针分别指向两个列表的起始位置
    len1, len2 = len(list1), len(list2)
    
    # 同时遍历两个列表,每次取较小的元素加入结果
    while i < len1 and j < len2:
        if list1[i] <= list2[j]:
            merged.append(list1[i])
            i += 1  # 移动list1的指针
        else:
            merged.append(list2[j])
            j += 1  # 移动list2的指针
    
    # 处理其中一个列表剩余的元素(因为列表有序,直接追加即可)
    merged.extend(list1[i:])
    merged.extend(list2[j:])
    
    return merged

# 测试你的示例输入
print(merge_sorted_lists([1,4,6], [2,3,5]))  # 输出: [1,2,3,4,5,6]

分析你可能犯的错误点

结合你的错误输出[1,2,3,4,5,5],我猜测你可能遇到了以下情况之一:

  • 指针移动遗漏:比如在添加list2[j]之后,忘记递增j指针。这种情况下,当遍历到list2的最后一个元素5时,会重复添加它,直到list1的指针遍历完成。
  • 剩余元素处理错误:循环结束后,错误地重复追加了list2的剩余元素,或者完全遗漏了list1中未遍历完的6。
  • 循环条件越界:比如把循环条件写成i <= len1或j <= len2,导致指针越界后重复取到list2的末尾元素。

排查建议

你可以把自己的代码和上面的正确实现对比,重点检查:

  • 每次添加元素后,对应的指针是否正确递增
  • 循环结束后,是否同时处理了两个列表的剩余元素
  • 循环条件是否为i < len1和j < len2(避免指针越界)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:20:33