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

课程项目中合并后vector大小翻倍且含前导0的问题求助

听起来你在这个课程项目收尾阶段卡了个挺闹心的问题——合并后的vector大小翻倍还带着不该有的前导0,结合你负责实现的三个函数,我给你捋捋最可能的排查方向:

优先排查multiway_merge函数(最可能出问题的环节)

你的问题描述完美匹配一种常见错误:初始化合并vector时误用了填充式创建,又混用了push_back添加元素。

  • 比如如果你写了类似这样的代码:
    int total_elements = list_count * elements_per_list;
    vector<int> merged(total_elements, 0); // 这里直接创建了total_elements个0的vector
    // 然后归并循环里:
    merged.push_back(current_min_element);
    
    结果必然是前导total_elements个0,再加上total_elements个实际合并的元素,最终大小刚好是预期的两倍!
  • 正确的做法二选一:
    1. 创建空vector,直接用push_back添加元素(可以提前reserve(total_elements)提升效率):
      vector<int> merged;
      merged.reserve(total_elements);
      // 归并逻辑中:
      merged.push_back(current_min);
      
    2. 先resize到目标大小,用索引填充而非push_back:
      vector<int> merged(total_elements);
      int idx = 0;
      // 归并逻辑中:
      merged[idx++] = current_min;
      
再检查quick_sort和partition函数

虽然排序函数主要负责单列表排序,但如果实现有误,也可能间接导致合并异常:

  • 排查partition:有没有在划分过程中错误地复制元素(比如用insert而非swap),导致原列表元素数量翻倍?
  • 排查quick_sort递归逻辑:有没有传入错误的索引范围,导致同一个元素被重复处理并添加?
  • 可以在每个列表排序后打印其大小和元素,确认排序后的列表元素数量和输入时完全一致,没有多出来的0或重复元素。
额外小技巧

在关键步骤加打印调试:比如每个列表排序后打印状态,归并过程中每添加一个元素就打印当前merged的大小和元素,能快速定位问题出在哪个环节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:52:01