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

有序数组求并集代码Bug排查:a先耗尽时为何丢失b的最后元素

非降序数组并集求解的元素丢失问题分析

问题现象

这段C++代码用于求解两个非降序数组的去重并集,但在特定场景下出现元素丢失:

  • 当数组a先耗尽时(比如a={1,2,...,10},b={2,3,...,11,12}),输出结果缺失b的最后一个元素12;
  • 当a末尾添加更大元素(比如13)后,输出结果恢复正常。
    将代码中标记为I、II的if语句改为while后,问题彻底解决。

核心原因

原来的if语句仅能处理剩余数组中的第一个非重复元素,无法遍历完所有剩余元素:

  1. 以a先耗尽的场景为例:主循环结束时,i=10(等于a.size()),j=5(对应b[j]=11)。
  2. 进入if(j < b.size())分支:
    • 将11加入结果集,跳过所有与11重复的元素(此处无重复),j自增到6;
    • 此时j=6仍小于b.size()=7,但if语句只会执行一次,后续的b[6]=12完全没被处理,导致丢失。
  3. 改成while语句后,会循环判断j < b.size():处理完11后,j=6仍满足条件,再次进入循环将12加入结果集,直到j遍历完整个b数组。

为什么添加13后结果正常?

当a末尾有13时,主循环不会提前结束:

  • 主循环中i=10(a[i]=13),j=6(b[j]=12),此时a[i]>b[j],代码会将12加入结果集,j自增到7(等于b.size());
  • 主循环结束后,处理a剩余的13,最终结果完整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 15:22:38