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; }
修正说明
- 将
tempInterval改为Interval类型,匹配数组元素类型;用.start和.end正确访问区间的起始与结束值。 - 把
mergedIntervals改为vector<Interval>类型,与函数返回值一致。 - 添加自定义lambda表达式作为
sort的比较器,实现按区间起始值升序排序。 - 调整循环逻辑:仅当遇到不重叠区间时才将临时区间加入结果,循环结束后手动加入最后一个区间,避免遗漏。
- 优化空输入的处理,直接返回空容器。
内容的提问来源于stack exchange,提问作者VishnuKc
相关产品推荐
相关产品推荐

