2026/5/19 0:19:31
网站建设
项目流程
做网站一般链接什么数据库,怎样下载wordpress,html网站开发事例教程,用vue开发好看的官网以数组 intervals 表示若干个区间的集合#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间#xff0c;并返回 一个不重叠的区间数组#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1#xff1a;
输入#xff1a;intervals [[1,3…以数组intervals表示若干个区间的集合其中单个区间为intervals[i] [starti, endi]。请你合并所有重叠的区间并返回一个不重叠的区间数组该数组需恰好覆盖输入中的所有区间。示例 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,3] [2,6] [8,10] [15,18]其中[1,3]和[2,6]有重叠要合并成[1,6] [8,10] [15,18]二、整体思路非常重要三步走先排序按区间起点从小到大从左到右扫描用一个新数组merged存合并后的区间三、代码逐行“翻译成人话”1️⃣ 函数定义不用管vectorvectorint merge(vectorvectorint intervals)意思输入是[[1,3],[2,6],...]输出也是同样格式2️⃣ 如果没区间直接返回空if (intervals.size() 0) { return {}; }防止空数组出错3️⃣ 排序这是关键sort(intervals.begin(), intervals.end());vectorint默认按第一个元素 → 第二个元素排序例如排序前: [ [2,6], [1,3], [8,10] ] 排序后: [ [1,3], [2,6], [8,10] ]为什么要排序因为只有排好序才能从左到右“挨个合并”4️⃣ 定义结果数组vectorvectorint merged; 用来存已经合并好的区间5️⃣ 开始遍历每个区间for (int i 0; i intervals.size(); i) {每次拿一个区间6️⃣ 当前区间的左右端点int L intervals[i][0], R intervals[i][1];比如当前区间是[2,6]那么L 2 R 67️⃣ 判断要不要新开一个区间if (!merged.size() || merged.back()[1] L) {这句话很关键拆开看情况 1merged还是空的!merged.size()说明这是第一个区间 直接放进去情况 2和上一个区间不重叠merged.back()[1] L意思是上一个区间的右端点 当前区间的左端点例如上一个: [1,3] 当前: [5,7]没有交集8️⃣ 不重叠 → 直接放进去merged.push_back({L, R});9️⃣ 否则有重叠 → 合并else { merged.back()[1] max(merged.back()[1], R); } 意思是把上一个区间的“右端点”拉长例如上一个: [1,3] 当前: [2,6]合并后[1,6]所以用max(...) 循环结束返回结果return merged;四、完整走一遍例子最重要输入intervals [[1,3],[2,6],[8,10],[15,18]]排序后本来就有序[1,3] [2,6] [8,10] [15,18]过程当前区间merged 之前操作merged 之后[1,3]空放入[[1,3]][2,6][[1,3]]重叠 → 合并[[1,6]][8,10][[1,6]]不重叠[[1,6],[8,10]][15,18][[1,6],[8,10]]不重叠[[1,6],[8,10],[15,18]]五、一句话总结考试 / 面试版先按起点排序然后遍历区间若当前区间与结果数组最后一个区间不重叠则直接加入否则合并并更新右端点。class Solution {public:vectorvectorint merge(vectorvectorint intervals) {if (intervals.size()0){return{};}sort(intervals.begin(),intervals.end());vectorvectorint merge;for(int i0;iintervals.size();i){int Lintervals[i][0];int Rintervals[i][1];if(!merge.size()||merge.back()[1]L){merge.push_back({L,R});}else{merge.back()[1]max(merge.back()[1],R);}}return merge;}};