区间合并代码中it[0]与tempInterval[1]的含义及判断逻辑解析
区间合并代码核心逻辑解析
首先贴出完整的C++代码:
class Solution { public: vector<vector<int>> merge(vector<vector<int>>& intervals) { vector<vector<int>> mergedIntervals; if(intervals.size()==0){ return mergedIntervals; } sort(intervals.begin(),intervals.end()); vector<int> tempInterval = intervals[0]; for(auto it:intervals){ if(it[0]<=tempInterval[1]){ tempInterval[1]=max(it[1],tempInterval[1]); }else{ mergedIntervals.push_back(tempInterval); tempInterval=it; } } mergedIntervals.push_back(tempInterval); return mergedIntervals; } };
针对疑问的解析:
关于
it[0]的含义it是遍历intervals容器的迭代变量,intervals的每个元素都是一个长度为2的vector<int>,用来表示一个区间的[起始值, 结束值]。所以it[0]就是当前遍历到的这个区间的起始数值。关于
tempInterval[1]的含义tempInterval是一个单独的vector<int>,同样用来存储一个区间的[起始值, 结束值],它并不是二维数组,所以不存在tempInterval[0][1]这种写法。tempInterval[1]指的是这个临时区间的结束数值,用来记录当前正在合并的区间的最大结束边界。if(it[0]<=tempInterval[1])的逻辑
代码开头已经通过sort对所有区间按起始值升序排序,所以遍历过程中前面的区间起始值一定小于等于后面的。这行判断的核心是:当前遍历到的区间是否和正在合并的临时区间存在重叠或连续关系:
- 当条件成立时:说明当前区间和临时区间有重叠(比如临时区间是[1,3],当前区间是[2,4]),或者当前区间的起始值刚好等于临时区间的结束值(比如[1,3]和[3,5]),此时需要合并这两个区间,更新临时区间的结束值为两者结束值的最大值,确保覆盖合并后的完整范围。
- 当条件不成立时:说明当前区间和临时区间完全不重叠(比如临时区间是[1,3],当前区间是[4,6]),此时把已经合并好的临时区间加入结果列表,再将当前区间设为新的临时区间,继续后续的合并判断。
内容的提问来源于stack exchange,提问作者user19996661
相关产品推荐
相关产品推荐

