- 1
- 2
- 3
- 4
- 5
链表与数组的综合应用:合并区间与插入区间
资料介绍
链表与数组的综合应用:合并区间与插入区间 一、合并区间问题 1.1 问题 给定多个区间,合并重叠的区间。 intervals = [[1,3],[2,6],[8,10],[15,18]]合并后 = [[1,6],[8,10],[15,18]] 1.2 排序+扫描 typedef struct { int start, end;} Interval;int compareInterval(const void *a, const void *b) { return ((Interval *)a)->start - ((Interval *)b)->start;}int mergeIntervals(Interval *intervals, int n, Interval *result) { if (n == 0) return 0; qsort(intervals, n, sizeof(Interval), compareInterval); int count = 0; result[count++] = intervals[0]; for (int i = 1; i < n; i++) { // 如果当前区间与前一个合并 if (intervals[i].start <= if="" .end=""> result[count-1].end) { result[count-1].end = intervals[i].end; } } else { result[count++] = intervals[i]; } } return count;} 核心:按开始时间排序,遍历时判断是否与已合并的最后一个区间重叠。 二、插入区间问题 2.1 问题 在一个已排序且不重叠的区间列表中插入一个新区间,保持不重叠。 intervals = [[1,3],[6,9]]insert [2,5]结果 = [[1,5],[6,9]] 2.2 三种情况处理 int insertInterval(Interval *intervals, int n, Interval newOne, Interval *result) { int count = 0; int i = 0; // 1. 新区间之前(end < new.start)的区间直接加入 while (i < n && intervals[i].end < newOne.start) { result[count++] = intervals[i++]; } // 2. 与新区间重叠的区间,合并 while (i < n && intervals[i].start <= newOne.end) { if (intervals[i].start < newOne.start) { newOne.start = intervals[i].start; } if (intervals[i].end > newOne.end) { newOne.end = intervals[i].end; } i++; } result[count++] = newOne; // 加入合并后的区间 // 3. 新区间之后的区间直接加入 while (i < n) { result[count++] = intervals[i++]; } return count;} 三种情况:新区间之前(不重叠)、与新区间重叠(合并)、新区间之后(不重叠)。 三、区间问题的其他应用 3.1 会议室安排 // 判断能否安排所有会议(区间不重叠)// 按结束时间排序,检查是否冲突 3.2 区间最值 // 在区间上求最大值(懒标记、线段树) 3.3 区间覆盖 // 用最少区间覆盖目标区间// 贪心:每次选择能覆盖当前起点的、结束最晚的区间 四、复杂度对比 五、总结 合并区间(排序+扫描判断重叠)和插入区间(三种情况处理)是区间问题的经典。理解"按开始排序"、"判断重叠"(start <= 已合并的end)、"合并取较大end"的核心逻辑,是解决区间类问题的基础。
部分文件列表
| 文件名 | 大小 |
| 链表与数组的综合应用:合并区间与插入区间.docx | 38K |
最新上传
-
yahuang001 打赏3.00元 3天前
-
yahuang001 打赏1.00元 3天前
-
zhongshaoxiong 打赏3.00元 3天前
-
他山之石可攻玉 打赏60.00元 3天前
用户:烟雨
-
江岚 打赏210.00元 3天前
用户:潇潇江南
-
江岚 打赏100.00元 3天前
-
21ic下载 打赏310.00元 3天前
用户:gsy幸运
-
21ic下载 打赏310.00元 3天前
用户:zhengdai
-
21ic下载 打赏310.00元 3天前
用户:江岚
-
21ic下载 打赏210.00元 3天前
用户:潇潇江南
-
21ic下载 打赏60.00元 3天前
用户:他山之石可攻玉
-
21ic下载 打赏60.00元 3天前
用户:烟雨
-
21ic下载 打赏60.00元 3天前
用户:w178191520
-
21ic下载 打赏60.00元 3天前
用户:w993263495
-
21ic下载 打赏110.00元 3天前
用户:xzxbybd
-
21ic下载 打赏60.00元 3天前
用户:zq_1943
-
21ic下载 打赏20.00元 3天前
用户:kk1957135547
-
21ic下载 打赏20.00元 3天前
用户:sun2152
-
21ic下载 打赏20.00元 3天前
用户:铁蛋锅
-
21ic下载 打赏20.00元 3天前
用户:xuzhen1
-
21ic下载 打赏20.00元 3天前
用户:w1966891335
-
21ic下载 打赏35.00元 3天前
用户:有理想666
-
21ic下载 打赏15.00元 3天前
用户:nuaanuaa111
-
21ic下载 打赏20.00元 3天前
用户:liqiang9090
-
21ic下载 打赏15.00元 3天前
用户:ningmengge
-
21ic下载 打赏10.00元 3天前
用户:mulanhk
-
21ic下载 打赏5.00元 3天前
用户:asys
-
21ic下载 打赏10.00元 3天前
用户:舞蹈荀彧
-
21ic小能手 打赏5.00元 3天前
资料:磁编码器开源方案
-
21ic小能手 打赏5.00元 3天前
-
21ic小能手 打赏5.00元 3天前
-
江岚 打赏20.00元 3天前
-
江岚 打赏50.00元 3天前
-
江岚 打赏20.00元 3天前
-
江岚 打赏10.00元 3天前
-
21ic小能手 打赏10.00元 3天前
-
21ic小能手 打赏8.00元 3天前
-
21ic小能手 打赏8.00元 3天前
-
21ic小能手 打赏5.00元 3天前
-
21ic小能手 打赏3.00元 3天前




全部评论(0)