双指针法解决LeetCode区间列表交集问题
1. 问题概述理解区间列表的交集LeetCode 986题Interval List Intersections是一个经典的数组处理问题要求我们找出两个已排序区间列表中所有重叠的区间。这个问题在实际开发中有着广泛的应用场景比如会议室调度、时间线合并、日历冲突检测等。给定两个区间列表firstList和secondList其中每个区间都是有序且不相交的即按起始点排序且没有重叠。我们需要返回这两个列表中所有存在交集的区间组合。例如firstList [[1,3],[5,9]] secondList [[4,8]] 输出[[5,8]]2. 解题思路分析2.1 双指针法的基本原理解决这个问题最有效的方法是使用双指针技术。我们维护两个指针i和j分别指向firstList和secondList中的当前区间。通过比较这两个区间的相对位置关系我们可以确定它们是否有交集以及如何移动指针。关键点在于理解四种可能的区间关系第一个区间完全在第二个区间左侧第一个区间完全在第二个区间右侧两个区间有重叠一个区间完全包含另一个区间2.2 交集判断的数学表达两个区间[a1, a2]和[b1, b2]的交集存在当且仅当max(a1, b1) min(a2, b2)如果这个条件满足那么交集区间就是[max(a1, b1), min(a2, b2)]。这个数学表达式是我们实现算法的核心逻辑它简洁地捕捉了所有可能的重叠情况。3. C语言实现详解3.1 数据结构定义首先我们需要定义区间和结果的数据结构/** * Return an array of arrays of size *returnSize. * The sizes of the arrays are returned as *returnColumnSizes array. */ int** intervalIntersection(int** firstList, int firstListSize, int* firstListColSize, int** secondList, int secondListSize, int* secondListColSize, int* returnSize, int** returnColumnSizes) { // 实现代码 }3.2 核心算法实现完整的C语言实现如下int** intervalIntersection(int** firstList, int firstListSize, int* firstListColSize, int** secondList, int secondListSize, int* secondListColSize, int* returnSize, int** returnColumnSizes) { // 分配足够大的空间存储结果 int maxPossibleSize firstListSize secondListSize; int** result (int**)malloc(sizeof(int*) * maxPossibleSize); *returnColumnSizes (int*)malloc(sizeof(int) * maxPossibleSize); int i 0, j 0; *returnSize 0; while (i firstListSize j secondListSize) { // 获取当前比较的两个区间 int a1 firstList[i][0], a2 firstList[i][1]; int b1 secondList[j][0], b2 secondList[j][1]; // 检查是否有交集 int start a1 b1 ? a1 : b1; int end a2 b2 ? a2 : b2; if (start end) { // 存在交集 result[*returnSize] (int*)malloc(sizeof(int) * 2); result[*returnSize][0] start; result[*returnSize][1] end; (*returnColumnSizes)[*returnSize] 2; (*returnSize); } // 移动指针 if (a2 b2) { i; } else { j; } } return result; }3.3 复杂度分析时间复杂度O(MN)其中M和N分别是两个列表的长度。我们最多只需要遍历每个列表一次。空间复杂度O(MN)最坏情况下每个区间都有交集需要存储所有结果。4. 边界条件与测试用例4.1 常见边界情况两个列表都为空一个列表为空所有区间都没有交集所有区间都有交集一个列表完全包含在另一个列表的某个区间内区间刚好相接但没有重叠如[1,2]和[2,3]4.2 测试用例设计void testIntervalIntersection() { // 测试用例1常规情况 int firstList1[][2] {{1,3},{5,9}}; int secondList1[][2] {{4,8}}; // 预期输出[[5,8]] // 测试用例2无交集 int firstList2[][2] {{1,3},{5,7}}; int secondList2[][2] {{8,10}}; // 预期输出[] // 测试用例3完全包含 int firstList3[][2] {{1,7}}; int secondList3[][2] {{3,5}}; // 预期输出[[3,5]] // 测试用例4多个交集 int firstList4[][2] {{0,2},{5,10},{13,23},{24,25}}; int secondList4[][2] {{1,5},{8,12},{15,24},{25,26}}; // 预期输出[[1,2],[5,5],[8,10],[15,23],[24,24],[25,25]] }5. 优化与扩展思考5.1 内存优化技巧在实际应用中我们可以优化内存使用预先计算可能的最大结果数量避免过度分配对于大型数据集考虑使用更高效的内存管理策略如果不需要保留结果可以边计算边处理减少内存占用5.2 实际应用场景会议室调度系统找出所有可用的会议室时间段日历应用检测两个人的空闲时间重叠基因序列比对找出DNA序列的匹配区域视频编辑找出多个视频轨道同时有内容的时间段5.3 算法变种合并多个区间列表的交集找出满足特定条件的最小/最大重叠区间统计重叠区间的总长度处理动态变化的区间列表6. 常见错误与调试技巧6.1 典型错误模式指针移动逻辑错误错误地只移动一个指针内存分配不足没有为结果分配足够空间边界条件处理不当如空列表或单个区间的情况交集判断条件错误使用错误的比较运算符6.2 调试建议打印中间结果在每次循环迭代时打印当前区间和指针位置使用可视化工具绘制区间图帮助理解逐步验证先验证简单用例再处理复杂情况单元测试为各种边界情况编写测试用例提示在LeetCode上提交时注意释放所有分配的内存否则可能导致内存泄漏错误。虽然LeetCode的测试系统可能不会检查这一点但这是良好的编程习惯。7. 性能对比与语言特性7.1 C语言实现的优势内存控制精确可以手动管理内存优化性能执行效率高没有额外的运行时开销适合嵌入式系统在资源受限环境中表现良好7.2 与其他语言的对比Python代码更简洁但运行效率较低Java有更丰富的数据结构但内存开销大C可以使用STL容器平衡了效率和便利性7.3 C语言特定注意事项指针操作要小心避免越界访问二维数组的内存布局要理解清楚返回值的内存管理要特别注意输入参数的含义要明确理解在实际面试中面试官可能会要求解释为什么选择这种实现方式以及如何进一步优化。理解算法背后的数学原理和实际应用场景能够让你在面试中脱颖而出。

相关新闻

Docker容器化部署Hadoop:快速构建可移植的大数据开发环境

Docker容器化部署Hadoop:快速构建可移植的大数据开发环境

1. 项目概述与核心价值最近在搞数据平台的环境标准化,发现一个挺头疼的事儿:每次新同事入职或者换台机器,都得重新搭一遍Hadoop环境。从Java环境变量配起,到Hadoop的配置文件修改,再到启动测试,一套流程下来…

2026/8/18 4:58:45 阅读更多 →
Ubuntu安装极点五笔:Fcitx框架下五笔输入法部署与优化指南

Ubuntu安装极点五笔:Fcitx框架下五笔输入法部署与优化指南

1. 项目概述:为什么在Ubuntu上需要极点五笔?如果你是从Windows平台迁移到Ubuntu的资深中文用户,尤其是习惯了五笔输入法的朋友,那么“输入法”这个问题,大概率是你遇到的第一个,也是最让人头疼的“水土不服…

2026/8/18 4:58:45 阅读更多 →
构建自优化AI代码生成流水线:从Best of N采样到LLM as Judge评估

构建自优化AI代码生成流水线:从Best of N采样到LLM as Judge评估

1. 从“能用”到“好用”:为什么我们需要自优化的代码生成流水线最近在折腾一个内部工具项目,需要频繁生成一些结构化的数据处理脚本。一开始,我直接用了某个主流AI编程助手,把需求描述扔进去,它确实能给我一段能跑的代…

2026/8/18 4:58:45 阅读更多 →

最新新闻

ComfyUI AI Bot工作流:从节点操作到自然语言导演的范式革命

ComfyUI AI Bot工作流:从节点操作到自然语言导演的范式革命

你有没有过这样的经历:想用AI生成一段视频,却发现自己像个“数字民工”,在ComfyUI里拖拽节点、调整参数、等待渲染,折腾半天可能只得到几秒不理想的片段?整个过程与其说是创作,不如说是在和工具搏斗。我们总…

2026/8/18 5:45:59 阅读更多 →
嵌入式C固件开发:构建可移植与健壮代码的核心方法论

嵌入式C固件开发:构建可移植与健壮代码的核心方法论

1. 项目概述:为什么我们需要可移植且健壮的C固件? 如果你在嵌入式领域摸爬滚打超过五年,大概率经历过这样的深夜:好不容易在一个ARM Cortex-M4的板子上把驱动调通,功能跑稳,老板一拍脑袋说“咱们换个RISC-V…

2026/8/18 5:45:59 阅读更多 →
商用车后市场数字化转型:从被动维修到主动健康管理的六大服务创新

商用车后市场数字化转型:从被动维修到主动健康管理的六大服务创新

1. 从“卖车”到“养车”:商用车后市场的价值觉醒如果你在物流行业干了十年以上,肯定经历过这样的场景:车队里一台主力牵引车在高速上突然趴窝,司机一个电话打回来,车队经理急得团团转。接下来就是一连串的糟心事&…

2026/8/18 5:45:59 阅读更多 →
AI Agent能力评测:从对话到任务执行的Harbor框架实践

AI Agent能力评测:从对话到任务执行的Harbor框架实践

1. 从“会聊天”到“会做题”:AI Agent能力评测的痛点最近和几个做AI应用的朋友聊天,发现一个挺有意思的现象:大家花了不少精力调教自己的AI Agent,让它能说会道、能查资料、能写邮件,看起来功能挺全。但一旦丢给它一个…

2026/8/18 5:45:59 阅读更多 →
五分钟部署赛博朋克聊天机器人:从环境配置到API集成全指南

五分钟部署赛博朋克聊天机器人:从环境配置到API集成全指南

这次我们来看一个能让你在五分钟内快速搭建拟人化赛博聊天机器人的项目。对于想快速体验AI对话、集成个性化助手,或者为应用增加智能交互能力的开发者来说,这个项目提供了一个极低门槛的入口。它的核心吸引力在于“快”——从零到可运行的聊天界面&#…

2026/8/18 5:45:59 阅读更多 →
全双工语音Agent评测实战:首音延迟测量与事件级验收框架构建

全双工语音Agent评测实战:首音延迟测量与事件级验收框架构建

1. 从“能对话”到“会对话”:全双工语音Agent评测的挑战与价值最近在跟进几个语音交互项目,从智能座舱到智能家居,再到一些垂类的客服场景,大家不约而同地开始提“全双工”和“语音Agent”。乍一听,这似乎是技术演进的…

2026/8/18 5:44:59 阅读更多 →

日新闻

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 如果你还停留在"看网课 不停暂停 截图 …

2026/8/18 0:00:57 阅读更多 →
思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 你是不是也经历过这种时刻:设计稿里…

2026/8/18 0:00:58 阅读更多 →
华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, …

2026/8/18 0:00:59 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/17 2:58:27 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/17 2:58:30 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/17 2:58:32 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/17 18:54:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →