C语言学习笔记20260626-道路树木统计(暴力标记与区间合并)
📅 2026/6/27 3:28:49
👁️ 次浏览
C语言学习笔记20260626-道路树木统计暴力标记与区间合并一、学习目标通过经典的“道路树木统计”问题掌握处理“区间覆盖”类问题的两种核心算法思想。深入理解暴力标记法的直观逻辑并学习如何通过区间合并法进行算法优化体会从“逐点操作”到“整体区间处理”的思维跃迁。二、问题拆解与核心逻辑本题要求计算一条长度为 L 的道路共有 L1 棵树在经过 M 次施工清理每次清理区间 [l, r] 内的所有树木后剩余树木的数量。核心约束条件为区间覆盖施工区域可能会重叠但同一位置的树木只能被清理一次。最终统计需要求出未被任何施工区间覆盖的整数点个数。三、方法一标记数组法暴力模拟3.1 核心思路利用一个数组arr来物理模拟整条道路。初始时将所有位置标记为“有树1”。每当有一个施工区间 [l, r] 时直接通过循环将该区间内的所有位置标记为“无树0”。最后遍历整个数组统计剩余“有树”的位置。3.2 完整代码实现#define_CRT_SECURE_NO_WARNINGS#includestdio.h// 方法1标记数组法intmain(){intL,M;scanf(%d %d,L,M);// 初始化道路0~L 每个位置都有树标记为1intarr[10000]{0};for(inti0;iL;i){arr[i]1;}// 处理 M 次施工将区间内的树标记为0for(inti0;iM;i){intl,r;scanf(%d %d,l,r);for(intjl;jr;j)// 注意内层循环变量应避开外层的 i{arr[j]0;}}// 统计剩余树木intcount0;for(inti0;iL;i){if(arr[i]1)count;}printf(%d,count);return0;}3.3 方法优缺点分析优点逻辑极其直观完全符合人类“画一条路把挖掉的地方涂黑最后数白点”的直觉。代码编写简单不易出错。缺点时间复杂度为 O(L M × 区间平均长度)。如果道路长度 L 达到 10^9或者区间长度极长暴力法不仅会严重超时还会因为数组过大导致内存溢出。四、方法二区间合并法数学优化4.1 核心思想化零为整不逐个去处理道路上的每一个点而是将 M 个施工区间看作整体。如果两个区间有重叠例如 [100, 200] 和 [150, 300]它们实际上等效于合并成了一个更大的区间 [100, 300]。通过合并所有重叠区间我们可以快速计算出“被挖掉的总长度”最后用总树数减去被挖掉的树数即可。4.2 完整代码实现#define_CRT_SECURE_NO_WARNINGS#includestdio.h// 方法二区间合并法效率高// 区间结构体structRange{intl,r;}arr[105];// 冒泡排序按左端点升序arr[i] 代表完整一段区间 [l, r]l 和 r 是一对绑定的数据voidsort(intm){for(inti0;im-1;i){for(intj0;jm-1-i;j){if(arr[j].larr[j1].l){structRangetarr[j];arr[j]arr[j1];arr[j1]t;}}}}intmain(){intL,M;scanf(%d%d,L,M);// 读取 M 个施工区间for(inti0;iM;i)scanf(%d%d,arr[i].l,arr[i].r);// 1. 排序按区间左端点升序排列sort(M);// 2. 贪心合并区间intcnt0;// 记录被挖掉的树的总数intnowLarr[0].l,nowRarr[0].r;// 维护当前正在合并的区间 [nowL, nowR]for(inti1;iM;i){if(arr[i].lnowR){// 情况一区间重叠新左端点 当前右端点// 更新右端点取两者的最大值以扩展合并区间if(arr[i].rnowR)nowRarr[i].r;}else{// 情况二区间不重叠新左端点 当前右端点// 当前合并区间 [nowL, nowR] 结束累加其长度cntnowR-nowL1;// 开启新的合并区间nowLarr[i].l;nowRarr[i].r;}}// 3. 加上最后一段未累加的合并区间cntnowR-nowL1;// 4. 计算剩余树木总树数 (L1) - 被挖掉的树 (cnt)intans(L1)-cnt;printf(%d,ans);return0;}4.3 核心细节解析排序的必要性只有按左端点排序后所有可能重叠的区间才会连续排列我们才能通过一次线性遍历完成合并。重叠的判断条件arr[i].l nowR。只要新区间的起点在当前合并区间的终点左边或刚好相接就说明它们连成了一片。易错点循环结束后最后一段正在维护的区间[nowL, nowR]还没有被累加到cnt中必须在循环外手动加上。五、总结与工程实践建议标记数组法是理解“区间覆盖”问题的基石其“数组映射”的思想在数据规模较小时非常有效。但在面对大规模数据时区间合并法展示了极高的算法智慧。它不仅将时间复杂度降低到了 O(M log M)主要消耗在排序上更展示了“将离散的点操作转化为连续的区间操作”这一解决复杂问题的通用范式。在实际开发中当 L 较小如 10^5 以内时可采用标记法快速解题当 L 极大但 M 较小如 10^5时必须采用区间合并法。
核心逻辑重构:告别路线图,拥抱岗位证据法
2026年的IT就业市场已发生结构性改变。传统的“学习路线图”思维(如先学Java还是Python)已严重过时,因为技术栈迭代速度远超个人学习速度,且企业招聘逻辑已从“考察…
📅 2026/6/27 3:28:49
这份适配 2026 新大纲的系统架构师备考资源覆盖全阶段学习需求,内容体系完整。基础与案例专题录播课拆解核心考点,配套专属论文写作专项课攻克论文重难点;第二版官方教材同步配套,搭配 W 老师独家总结文档、历年直播押题课程&…
📅 2026/6/27 3:28:49
空气计算机:概念谱系、技术原理与物理边界
摘要
“空气计算机”一词在不同的技术语境中指向三种截然不同的概念:航空领域的大气数据计算机、以压缩空气为工质的气动逻辑计算装置,以及思想实验层面的“空气算盘”。本文系统梳理了这三种概念的技术内涵与实现原理,重点分析…
📅 2026/6/27 3:28:49
在当今全球化的大环境下,跨国物流的需求日益增加,而青岛作为重要的海港城市,拥有得天独厚的地理位置和多样的物流选择。特别是在青岛到古巴航线的运营中,青岛顺畅达海运以其卓越的服务和强大的成本控制能力脱颖而出。本篇文章将详…
📅 2026/6/27 4:38:52
当一家拥有五十余年历史的海藻制造企业决定重构自己的数字化底座时,它面对的不是"要不要数字化"的选择题,而是"如何在六套异构系统之间打通最后一公里"的工程难题。青岛明月海藻集团有限公司始建于1968年,集团总部位于青…
📅 2026/6/27 4:38:52
提供对应的Proteus仿真电路图,Keil程序源码(C语言),原理图,模块资料、元件清单、程序流程图等电子资料参考学习,文末附全部资料的下载链接。 01设计要求
设计一个基于51单片机心形流水灯跑马灯设计&#x…
📅 2026/6/27 4:38:52
问题原因
CentOS 7 官方已经停止维护,mirrorlist.centos.org 域名解析失效,默认官方源无法访问,需要先替换为阿里云CentOS 7归档源,才能正常用 yum/yumdownloader 下载依赖包。
一、联网机器修复YUM源(CentOS7&#…
📅 2026/6/27 4:38:52
2026.6.26 14:00-17:26学习第一天1.搭建了VS环境2.编写了第一段代码 helloworld3.初识常量和变脸,认识了int是一个整数类型,了解了变量命名规范4.大概明白了运行一个程序在内存中是如何存放的,大概了解了分配的4GB虚拟内存空间架构5.认识了数…
📅 2026/6/27 4:38:52
一、调试类型Debug按侵入性(invasive)可以分为两大类:侵入式调试(Invasive Debug):暂停处理器执行,干预程序运行,包括停机调试(Halting Debug)和调试监控异常…
📅 2026/6/27 4:33:52
一、引言
1.1 研究背景
深度神经网络在各种计算机视觉任务上取得了巨大成功,但模型的计算效率始终是制约其在实际场景中部署的关键因素。特别是在目标检测领域,模型往往需要在保证精度的同时实现实时推理。
当前主流的网络架构设计往往在训练时采用复杂的多分支结构(如Re…
📅 2026/6/27 0:07:52
更多请点击:
https://codechina.net
第一章:JetBrains官方不愿明说的IDEA License陷阱(含企业级授权成本暴增预警) JetBrains 官方文档中极少提及 License 模式在实际企业部署中的隐性成本激增机制,但真实场景中&…
📅 2026/6/27 0:07:52
051、相对导入 vs 绝对导入:importlib 动态加载与插件系统设计上周帮团队排查一个诡异的ModuleNotFoundError,同事在子包内部用相对导入引用兄弟模块,结果跑测试时炸了——明明IDE里高亮正常,一执行就报“attempted relative impo…
📅 2026/6/27 0:07:52
1. 从手册到实战:SLIDER与SPINBOX控件的深度解析在嵌入式GUI开发里摸爬滚打十几年,我见过太多项目因为界面交互的“小问题”而卡壳。参数调节不跟手、数值输入效率低下,这些看似不起眼的细节,往往是决定产品用户体验成败的关键。e…
📅 2026/6/26 19:22:54
暗黑2重获新生:D2DX如何让经典游戏在现代Windows系统上流畅运行 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx
…
📅 2026/6/26 19:27:14
CompressO终极指南:免费开源的视频图像压缩神器 【免费下载链接】compressO Convert any video/image into a tiny size. 100% free & open-source. Available for Mac, Windows & Linux. 项目地址: https://gitcode.com/gh_mirrors/co/compressO
你…
📅 2026/6/26 17:51:00