14 合并区间

📅 2026/8/3 14:24:06
14 合并区间
示例 1输入intervals [[1,3],[2,6],[8,10],[15,18]] 输出[[1,6],[8,10],[15,18]] 解释区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2输入intervals [[1,4],[4,5]] 输出[[1,5]] 解释区间 [1,4] 和 [4,5] 可被视为重叠区间。 示例 3输入intervals [[4,7],[1,4]] 输出[[1,7]] 解释区间 [1,4] 和 [4,7] 可被视为重叠区间。提示1 intervals.length 104 intervals[i].length 2 0 starti endi 104思路1、判断参数的合法性2、对二维vector数组进行排序3、创建一个vectorvectorint merged 动态数组存放答案4、开始进入循环循环排序过的intervals数组5、记录当前的区间为curNum左边界为L右边界为R6、判断一下 》 假如merged 数组为空或者当前区间的左边界大于merged数组最后一个节点的右边界说明这个区间大于所有merged 数组的区间直接放入merged 的最后一位就行7、否则当前区间和merged数组有重合区间判断R和merged 数组最后一个节点的右边界谁更大更新merged 数组最后一个节点的右边界有可能当前区间curNum包含在merged数组内8、循环结束返回merged 数组class Solution { public: vectorvectorint merge(vectorvectorint intervals) { int nintervals.size(); if(n2) return intervals; vectorvectorint numsintervals; vectorvectorint ans; sort(nums.begin(),nums.end(),std::lessvectorint()); int left0,right0; for(int i0;in;i){ if(nums[i].size()2) continue; if(ans.empty()||ans.back()[1]nums[i][0]){ ans.push_back(nums[i]); } else{ ans.back()[1]nums[i][1]ans.back()[1]?nums[i][1]:ans.back()[1]; } } return ans; } };推荐一个零声教育学习教程个人觉得老师讲得不错分享给大家[LinuxNginxZeroMQMySQLRedisfastdfsMongoDBZK流媒体CDNP2PK8SDockerTCP/IP协程DPDK等技术内容点击立即学习:链接