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

C++合并重叠区间代码编译错误排查(InterviewBit问题)

合并重叠区间的C++代码错误分析与修正

错误原因解析

  • 类型不匹配错误:你定义vector<int> tempInterval=A[0];,但A是vector<Interval>类型,A[0]是Interval结构体对象,无法直接赋值给vector<int>,这是第一个编译错误的根源。
  • 成员访问方式错误:Interval是自定义结构体,访问它的起始和结束值需要用.操作符(比如it.start、it.end),而非数组的[]下标,这导致了后面两个"no match for 'operator[]'"错误。
  • 返回值类型不一致:函数声明返回vector<Interval>,但你定义的mergedIntervals是vector<int>,类型不匹配。
  • 逻辑错误:循环内部每次迭代都执行mergedIntervals.push_back(tempInterval)和return mergedIntervals,会导致函数提前返回,无法完成所有区间的合并;同时循环结束后没有把最后一个合并好的区间加入结果。
  • 排序问题:直接调用sort(A.begin(),A.end())会失败,因为Interval结构体没有默认的<运算符重载,需要自定义比较规则。

修正后的代码

/**
 * Definition for an interval.
 * struct Interval {
 *     int start;
 *     int end;
 *     Interval() : start(0), end(0) {}
 *     Interval(int s, int e) : start(s), end(e) {}
 * };
 */

vector<Interval> Solution::merge(vector<Interval> &A) {
    if(A.empty()){
        return {};
    }
    
    // 自定义排序规则:按区间起始值升序排列
    sort(A.begin(), A.end(), [](const Interval& a, const Interval& b) {
        return a.start < b.start;
    });
    
    vector<Interval> mergedIntervals;
    Interval tempInterval = A[0];
    
    for(const auto& interval : A) {
        // 当前区间与临时区间重叠,合并更新结束值
        if(interval.start <= tempInterval.end) {
            tempInterval.end = max(interval.end, tempInterval.end);
        } else {
            // 无重叠,将临时区间加入结果,更新临时区间为当前区间
            mergedIntervals.push_back(tempInterval);
            tempInterval = interval;
        }
    }
    // 加入最后一个合并好的区间
    mergedIntervals.push_back(tempInterval);
    
    return mergedIntervals;
}

修正说明

  1. 将tempInterval改为Interval类型,匹配数组元素类型;用.start和.end正确访问区间的起始与结束值。
  2. 把mergedIntervals改为vector<Interval>类型,与函数返回值一致。
  3. 添加自定义lambda表达式作为sort的比较器,实现按区间起始值升序排序。
  4. 调整循环逻辑:仅当遇到不重叠区间时才将临时区间加入结果,循环结束后手动加入最后一个区间,避免遗漏。
  5. 优化空输入的处理,直接返回空容器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 01:06:19