- 博客(160)
- 收藏
- 关注
原创 Linux进程信号:内核数据结构与捕捉递达全流程
本文深入剖析Linux信号机制,揭示信号在进程控制块(PCB)中的底层实现。通过task_struct结构体展示信号在内核中的存储方式,包括pending(未决)、block(阻塞)位图和handler处理函数表。详细解析信号集操作函数(sigemptyset/sigaddset等)和核心系统调用(sigprocmask/sigpending),并通过代码实验验证:1)信号递达前pending位会被清零;2)SIGKILL(9)和SIGSTOP(19)信号具有特权,无法被屏蔽或忽略。文章从内核源码角度揭示了
2026-05-14 21:48:38
280
6
原创 Linux信号机制:从键盘到内核、进阶实战硬核剖析
本文深入解析了Linux进程信号的原理与处理机制。信号是操作系统与进程通信的重要方式,属于软中断,具有异步性和延迟处理的特点。文章详细介绍了信号的分类(普通信号和实时信号)、保存方式(通过PCB中的位图实现)以及三种处理动作(默认、忽略和自定义捕捉)。通过代码示例演示了signal函数的使用方法,并指出9号和19号信号无法被忽略或自定义捕捉。同时分析了信号的多种产生方式,包括终端按键、系统调用、软件条件和硬件异常,并深入剖析了硬件异常导致进程崩溃的底层机制。最后强调理解信号机制对Linux系统编程的重要性,
2026-05-14 10:07:46
285
5
原创 力扣算法:用栈消消乐,巧解相邻重复与退格字符串
本文解析了LeetCode两道字符串处理题目:1047(删除相邻重复项)和844(比较含退格的字符串)。第一题采用栈结构模拟消消乐机制,通过遍历字符串实现相邻重复项的消除。第二题通过预处理字符串,先处理退格符再比较字符串是否相等。两题均使用类似栈操作的字符串处理方法,时间复杂度为O(n),空间复杂度为O(n)。文章提供了清晰的解题思路和C++实现代码。
2026-05-11 22:40:28
292
4
原创 【Linux进程间通信】硬核剖析:消息队列、信号量、内核IPC资源统一管理与mmap加餐
本文深入剖析了SystemV IPC机制,重点探讨了消息队列和信号量的实现原理。消息队列通过类型标签实现选择性读取,内核使用双向链表管理消息;信号量则通过PV原语保护临界资源,采用计数器+等待队列机制。文章揭示了Linux内核如何利用C语言实现多态:所有IPC资源都包含kern_ipc_perm基类,通过全局ipc_ids数组统一管理。最后介绍了mmap文件映射机制,并演示了如何用mmap模拟malloc内存分配。这些底层设计展现了操作系统精妙的架构艺术。
2026-05-10 23:14:23
486
17
原创 Linux共享内存原理与实战:从内核到C++实现|附源码
本文深入解析了Linux SystemV共享内存的运作机制。共享内存通过将同一块物理内存映射到不同进程的虚拟地址空间,实现进程间通信,其核心优势在于零拷贝机制——进程可直接通过指针访问内存,无需系统调用。文章详细介绍了共享内存的创建、挂接、去关联和删除四个关键系统调用,并通过C++实战代码演示了完整使用流程。同时指出共享内存的三大特性:无需系统调用、速度最快但缺乏保护机制,建议配合信号量使用以确保数据安全。最后强调共享内存的生命周期随内核而非进程,需要主动管理释放。
2026-05-10 09:30:00
820
16
原创 Linux命名管道:跨进程通信实战指南|附源码
摘要:本文介绍了命名管道(FIFO)作为进程间通信(IPC)的重要方式。相比匿名管道,命名管道通过文件系统路径名实现无关进程间的通信,数据仍保留在内存缓冲区而非磁盘。文章详细讲解了命名管道的创建方法(命令行mkfifo和C/C++函数)、与匿名管道的区别、打开规则及同步机制,并通过C++实现的Server-Client聊天程序展示了实际应用。命名管道打破了进程间必须具有亲缘关系的限制,是Linux下基础且高效的进程通信方式。
2026-05-08 19:51:23
873
24
原创 进程池构建:高效任务派发与隐藏BUG揭秘全解析
本文介绍了进程池技术的原理与实现。通过类比外卖员池的概念,解释了池化技术"空间换时间"的思想。重点讲解了Linux下进程池的工作机制:预先创建多个子进程,通过管道进行任务派发与回收,避免频繁创建销毁进程的开销。文章详细剖析了进程池的实现过程,包括任务定义、进程通信、负载均衡等核心模块,并特别指出了进程回收过程中可能出现的文件描述符泄露问题及其解决方案。最后提出了epoll多路复用、动态扩缩容等优化方向,提供了可直接编译运行的完整代码实现。
2026-05-08 08:00:00
429
19
原创 深入解析进程间通信:管道机制全揭秘
本文深入解析了Linux系统中进程间通信(IPC)的核心机制——管道(pipe)。文章首先介绍了IPC的基本概念和发展历程,重点剖析了匿名管道的工作原理。通过文件描述符和fork机制,父子进程可以共享同一内存缓冲区实现通信。内核层面,管道通过两个独立的struct file对象(读写端)共享同一个inode,并利用环形缓冲区实现高效数据传输。文章详细阐述了管道的四大特性:单向通信、血缘关系限制、文件本质和同步机制,并通过代码示例演示了管道的实际应用场景和边界条件。最后从内核视角揭示了管道作为VFS特殊文件的
2026-04-30 22:04:38
925
29
原创 Linux:静态链接与动态链接深度解析
本文深入解析了程序链接的两种方式:静态链接和动态链接。静态链接将目标文件(.o)和静态库在编译时合并成独立可执行文件,通过重定位表修正函数地址,但会导致文件臃肿。动态链接则将链接推迟到运行时,通过全局偏移量表(GOT)和过程链接表(PLT)实现延迟绑定,使多个进程可共享同一动态库的物理内存副本。文章详细阐述了ELF文件加载机制、虚拟地址空间映射原理,以及动态链接如何利用位置无关代码(PIC)实现库的任意地址加载。动态链接通过地址无关技术和延迟绑定优化,显著提升了内存利用率和程序启动速度,是现代操作系统主流的
2026-04-30 08:00:00
659
18
原创 Linux:深入解析ELF文件结构
ELF文件格式摘要: ELF(可执行与可链接格式)是Linux系统中可执行文件、目标文件和共享库的标准格式。ELF文件包含四部分:ELF头、程序头表、节头表和节数据。ELF文件分为四种类型:可重定位文件(.o)、可执行文件、共享目标文件(.so)和核心转储文件。 关键结构包括: ELF头描述文件基本信息 程序头表定义如何加载到内存(执行视图) 节头表描述各节信息(链接视图) 数据节包括: .text:可执行代码 .data:初始化数据 .bss:未初始化数据 .rodata:只读数据 查看工具: reade
2026-04-28 17:11:36
423
6
原创 我用 Codex 做了一个智能围棋机器人系统:从 AI 引擎接入到前后端联调的完整实战
本文分享了作者使用Codex开发智能围棋机器人系统的实战经验。通过这个涉及KataGo引擎、Python网关、React前端等复杂组件的项目,作者发现Codex不仅能辅助编码,更能参与架构设计、问题排查和工程管理。关键使用心得包括:1)让AI先理解上下文再动手;2)设定明确的工程约束;3)拆解可验证的小任务;4)要求同步维护文档。实践证明,当给予清晰目标、稳定上下文和严格边界时,Codex可以承担架构推进、跨层联调等高级开发工作,成为真正的工程协作者而非随机代码生成器。文章强调,AI编程的真正价值在于如何将
2026-04-26 16:54:01
1492
19
原创 【AI大模型入门(三)】大模型API接入、Ollama本地部署、SDK接入
本文介绍了三种AI大模型接入方式:1)云端API调用(如OpenAI),适合快速开发但存在数据隐私风险;2)本地私有化部署(如使用Ollama管理开源模型),保障数据安全但需硬件投入;3)SDK集成,简化API调用流程。文章详细演示了Ollama本地部署流程,包括模型拉取、路径配置和API调用,并对比了不同方案的适用场景(数据敏感性、技术实力、成本等)。最后指出原生LLM的局限性,如输入长度限制、私有知识缺失等,为后续引入LangChain等框架埋下伏笔。
2026-04-22 21:56:24
732
12
原创 Linux C 语言编译链接全解析:静态库与动态库从原理到实战
本文深入讲解了C/C++程序的编译链接过程,重点分析了动静态库的原理和使用方法。文章首先回顾了编译过程,介绍了目标文件的生成;然后详细说明了静态库的制作(使用ar工具)、使用(通过-L、-I、-l选项)和安装流程;接着讲解了动态库的特点(运行时链接)、生成(使用-shared和-fPIC选项)及四种加载路径配置方法;最后比较了动静态库的差异,并演示了第三方库ncurses的使用。通过具体示例和Makefile展示,帮助读者掌握库文件的开发部署全流程,理解模块化编程的优势。
2026-04-22 18:45:47
1044
18
原创 【AI大模型入门(二)】提示词工程进阶
导语: 在 AI 时代,自然语言就是新的编程语言。很多开发者抱怨大模型写出的代码全是 Bug,或者写的文章像“AI味”十足的废话。这其实是因为提示词(Prompt)没写好。本文将为你介绍从基础到高阶的提示词框架,并特别解析在 DeepSeek-R1、OpenAI o1 等“深度推理模型”时代,提示词写法发生了哪些革命性变化。1.为什么提示词如此重要?大模型的本质是“概率预测模型”。如果你的输入模糊(例如:“帮我写个营销方案”),模型就会在巨大的概率空间里随便找一条最平庸的路径。 提示词的作用,就是
2026-04-21 20:16:45
543
原创 大语言模型 (LLM) 零基础入门:核心原理、训练机制与能力全解
本文面向开发者群体,以通俗化视角系统科普大语言模型(LLM)核心知识,助力技术人员掌握AI时代核心底层逻辑。文章区分了传统模型与大模型的本质差异,阐释LLM基于Transformer神经网络、自监督学习的训练原理,点明其**下一词预测**的核心本质,并讲解RLHF对齐技术对模型输出的优化作用。同时梳理了大模型参数量大、通用性强、涌现能力突出等核心特征,汇总当前主流开源与商用LLM生态。文章全面拆解LLM的能力边界,覆盖文本生成、多模态创作等核心应用,弥补大众对大模型的认知盲区,为后续学习提示词工程、落地AI
2026-04-20 22:23:34
664
6
原创 LeetCode 高精度算法:二进制加法 + 字符串乘法(C++ 完整代码 + 避坑)
本文介绍了高精度运算中的字符串加法与乘法实现方法。对于加法,通过模拟竖式计算,从低位到高位逐位相加并处理进位;对于乘法,提供两种解法:常规竖式模拟和优化方法,后者利用数组先无进位相乘再统一处理进位,效率更高。两种运算都需注意结果反转和前导零处理。文章结合LeetCode题目给出了具体的代码实现,帮助理解大数运算的底层逻辑。
2026-04-20 20:21:51
483
1
原创 面试官灵魂拷问:Linux软链接与硬链接到底有什么区别?(附底层Inode级深度图解)
本文深入解析Linux系统中软链接和硬链接的本质区别。从文件系统底层出发,指出硬链接是在目录数据块中新增文件名与源Inode的映射记录,共享同一Inode;而软链接是拥有独立Inode和数据块的全新文件,存储目标文件路径。关键区别在于:硬链接不能跨文件系统且不能链接目录,源文件删除后数据仍存在;软链接可跨文件系统、支持目录链接,但会因目标删除而失效。通过Inode机制剖析,揭示了硬链接是"同体多名",软链接是"独立替身"的底层原理,为理解Linux文件系统提供了本质性
2026-04-19 19:43:09
633
9
原创 万字长文爆肝:彻底弄懂Linux文件系统(Ext2),从Inode、Block到Dentry核心机制全解析
本文深入剖析了Linux ext2文件系统的底层架构和工作原理。文章从宏观层面介绍了ext2文件系统采用分而治之的块组(BlockGroup)设计,每个块组包含超级块、块组描述符、位图和Inode表等关键区域。重点讲解了Inode与数据块的映射机制,包括直接指针和多级间接指针的索引结构。通过文件创建、读取、修改和删除的完整生命周期,揭示了文件系统底层的数据组织方式。文章还详细解析了路径查找、目录缓存(dentry)以及挂载(mount)的核心机制,并通过虚拟磁盘实验演示了文件系统的挂载过程。最后总结了Lin
2026-04-19 19:16:44
478
21
原创 深入理解Linux底层存储:从物理磁盘架构到文件系统(inode/Block)原理
本文深入剖析了Linux磁盘与文件系统的底层原理。首先从硬件层面解析了机械硬盘的物理结构,包括盘片、磁头、传动臂等核心组件的工作原理。详细讲解了磁盘的CHS寻址模式和现代LBA逻辑块寻址机制,以及二者间的转换关系。在文件系统部分,重点介绍了inode数据结构如何存储文件元信息,包括权限、所有者、时间戳等属性,以及通过块指针管理文件内容存储。文章还阐述了操作系统如何通过分区表管理磁盘空间,并以逻辑块为基本单位进行高效读写。最后指出文件系统的核心作用是将磁盘抽象为有序存储空间,并通过inode和目录结构实现文件
2026-04-18 21:47:46
793
21
原创 力扣算法题:字符串(最长公共前缀|最长回文子串)
本文介绍了两种字符串算法:1.最长公共前缀问题,提出两种解法:两两比较法(逐个字符串比较)和统一比较法(以首个字符串为基准);2.最长回文子串问题,采用中心扩展算法,分别处理奇数和偶数长度的回文情况。两种算法均通过边界条件处理和字符逐一比较实现,代码展示了具体实现过程。
2026-04-18 16:04:56
243
17
原创 力扣C++算法:哈希表(存在重复元素|存在重复元素II|字母异位词分组)
本文介绍了三个LeetCode哈希表相关算法题:1.存在重复元素,使用哈希集合快速判断重复元素;2.存在重复元素II,在1的基础上增加下标距离限制,利用哈希表存储元素和下标;3.字母异位词分组,通过排序字符串作为哈希表键值,将异位词分组存储。三个问题都利用了哈希表高效查找的特性,分别解决了不同约束条件下的重复元素判断和字符串分组问题。
2026-04-17 16:18:07
581
12
原创 数据库基础夯实:从零手写DDL与DML,MySQL核心语法实战解析
这篇文章详细介绍了MySQL数据库的创建、表结构设计与数据操作的核心技术。首先讲解了数据库创建时的字符集选择(推荐utf8mb4)和排序规则设置。其次重点阐述了关系型数据表创建中的外键依赖问题,强调必须遵循"先被依赖者后依赖者"的建表顺序原则。文章还展示了表结构重构的ALTER TABLE操作,以及数据的增删改查操作,特别提醒UPDATE/DELETE时务必检查WHERE条件以避免全表污染。通过完整的SQL示例,帮助开发者掌握从数据库设计到数据操作的全流程,是MySQL数据库实践的重要指
2026-04-17 16:17:45
410
2
原创 用系统调用从零封装一个C语言标准I/O库 | 附源码
这篇文章探讨了Linux系统编程中常见的"听懂但不会写"困境,提出通过自建标准I/O库来深入理解底层机制。作者详细讲解了如何利用系统调用封装类似fopen、fwrite等函数,重点分析了用户缓冲区的实现原理(如行缓冲、全缓冲策略)和内核交互机制(write系统调用与fsync的区别)。通过构建包含文件描述符、缓冲区和刷新策略的My_FILE结构体,完整演示了从数据暂存用户缓冲区到最终刷盘的完整流程。文章强调理解数据结构的重要性,建议通过"面向结构编程"来掌握底层逻辑,
2026-04-17 10:07:47
516
原创 Linux:缓冲区
文章摘要: 缓冲区是内存中预留的存储空间,用于临时存放输入/输出数据,分为输入缓冲区和输出缓冲区。其核心意义在于减少频繁的系统调用,提升CPU效率。标准I/O提供全缓冲、行缓冲和无缓冲三种类型,适用于不同场景(如磁盘文件、终端交互)。C库函数(如printf)自带用户级缓冲区,而系统调用(如write)无缓冲区,缓冲机制由C标准库实现。文中还通过代码示例对比了库函数与系统调用的缓冲差异,并指出重定向时缓冲方式的改变可能导致输出异常。最后提到可通过强制刷新(fflush)或自定义缓冲区优化I/O性能。
2026-04-17 10:06:59
749
8
原创 拒绝踩坑!Windows下MySQL 8.0核心架构原理解析与纯净安装保姆级指南(附“绿色版”Navicat下载)
本文详细解析了Windows环境下MySQL 8.0的安装与配置要点。首先强调了MySQL的C/S架构特性,建议仅安装服务端并搭配专业第三方客户端使用。在安装包选择上,推荐556M的离线安装包以避免网络问题。重点讲解了Server配置的核心参数:选择Server-only安装类型、保留3306默认端口、务必选择传统认证方式以确保兼容性。同时提供了Windows服务配置建议和数据安全设置说明。最后针对Navicat等客户端工具的使用,特别提醒破解版用户禁止更新以避免失效。全文从架构原理到实操细节,帮助开发者避
2026-04-16 11:14:15
590
13
原创 C++算法:哈希表(简介|两数之和|判断是否互为字符重排)
本文介绍了哈希表的基本概念和应用场景,重点讲解了两数之和和字符重排判断两个算法题。哈希表通过O(1)时间复杂度实现快速查找,适用于频繁查找的场景。在两数之和问题中,对比了暴力解法和哈希表优化解法;在字符重排判断中,展示了使用数组模拟哈希表的优化方法。文章提供了详细的代码实现和算法原理分析,帮助理解哈希表在实际问题中的应用技巧。
2026-04-16 08:39:02
266
9
原创 力扣题型--链表(合并K个升序链表|K个一组翻转链表)
本文介绍了力扣链表题型中的两个经典问题:合并K个升序链表和K个一组翻转链表。对于合并K个升序链表,提供了两种解法:优先队列法和分治递归法,分别通过小根堆排序和两两合并实现。对于K个一组翻转链表,采用模拟方法,先计算需要翻转的组数,再通过头插法进行分组翻转。两种解法都给出了详细的算法原理和完整代码实现。
2026-04-13 16:00:56
356
1
原创 力扣题型--链表(两数相加|两两交换链表中的节点|重排链表)
本文介绍了三个链表操作算法:1.两数相加:通过模拟加法过程,逆序存储数字并处理进位;2.两两交换节点:使用递归或循环方式交换相邻节点;3.重排链表:利用快慢指针找中点,逆序后半段后合并。每个算法都包含解题思路和C++实现代码,重点处理了链表逆序、节点交换和指针操作等关键问题。
2026-04-13 15:44:15
189
原创 【创作一周年纪念】365天的坚持:从《初识C语言》到现在的成长之旅,感谢遇见
文章摘要: 一位IT创作者在博客一周年之际回顾了自己的写作历程。从第一篇生涩的《初识C语言》开始,365天的坚持带来了技术沉淀、表达提升和抗焦虑能力的成长。作者分享了创作中的孤独与喜悦,感谢读者的互动支持,并表示将继续保持初心,深耕技术分享。文章展现了从被动输入到主动输出的转变,以及在代码世界中收获的人文温度。
2026-04-03 22:27:15
378
1
原创 蓝桥杯--搜索(DFS基础回溯法,剪枝,记忆化搜索)
本文系统讲解了算法竞赛中搜索算法的三大核心技术:回溯法、剪枝和记忆化搜索。回溯法通过"恢复现场"实现状态树的遍历,典型应用包括N皇后问题;剪枝通过提前终止无效搜索路径提升效率,如军训排队问题;记忆化搜索则通过存储中间结果避免重复计算,典型如地宫取宝问题。文章通过多个经典例题详细解析了每种技术的实现原理和应用场景,展示了搜索算法在解决复杂问题时的强大威力,为算法竞赛选手提供了系统的解题思路和方法论。
2026-04-03 22:01:02
676
原创 蓝桥杯基础--排序模板合集II(快速,归并,桶排序)
本文介绍了三种高效排序算法及其应用场景:快速排序采用分治法,平均时间复杂度O(NlogN),适合寻找第K大/小的数;归并排序稳定且严格O(NlogN),是求解逆序对问题的利器;桶排序利用值域特征实现O(N)线性排序,适用于特定数据分布。文中提供了各算法的核心代码模板,并指出在蓝桥杯竞赛中,快速排序适合处理大规模数据,归并排序擅长统计逆序对,桶排序则针对特殊数据特征优化。掌握这三种算法能有效解决竞赛中的各类排序问题。
2026-03-29 21:23:49
441
原创 蓝桥杯基础--排序模板合集I(冒泡,选择,插入排序)
本文介绍了三种基础排序算法:冒泡排序、选择排序和插入排序。冒泡排序通过相邻元素比较交换将最大值"沉底";选择排序每次选择极值元素与边界交换;插入排序则模拟整理扑克牌过程,将新元素插入已排序区间。文章提供了各算法的核心思想、标准模板实现和例题解答(蓝桥杯3225题),帮助读者掌握基础排序原理及其应用场景,为处理更复杂的算法问题奠定基础。
2026-03-28 20:08:04
534
原创 蓝桥杯基础--前缀和
摘要:前缀和是一种高效处理区间求和问题的算法技巧,通过预处理生成辅助数组,将查询时间复杂度从O(n)降至O(1)。文章详细解析了前缀和的原理和实现方法,包括预处理步骤和区间查询公式。通过两道蓝桥杯真题(区间次方和与平衡子串)展示了前缀和的实际应用,其中涉及快速幂运算、取模处理等关键细节,以及前缀和变体技巧在字符统计问题中的创新使用。该技术能显著提升算法竞赛中大数据量处理问题的效率。
2026-03-25 22:41:48
645
原创 蓝桥杯基础--进制转换
本文系统讲解了编程竞赛中的进制转换知识点。首先解析进制的本质是"逢k进一"的计数规则和位权概念,然后提供了两个核心代码模板:任意进制转十进制的"秦九韶算法"和十进制转任意进制的"除k取余法"。文章通过三道蓝桥杯真题(十六进制转十进制、九进制转十进制、任意进制互转)进行实战演练,展示了如何灵活运用模板解题。特别强调了处理字符与数字转换、数组翻转等关键细节,并提供了优化后的精简代码实现。掌握这些核心方法能有效提升编程竞赛中的解题效率。
2026-03-25 19:45:09
618
原创 蓝桥杯基础--递归
本文介绍了递归算法的核心概念与应用。递归通过"自顶向下"的思维方式,将复杂问题拆解为相同结构的子问题,包含递去和归来两个过程。文章阐述了递归实现的三个关键要素:明确函数功能、确定递归边界条件和推导关系。通过与循环的对比,分析了递归在代码简洁性和性能开销上的特点。最后通过斐波那契数列和数的计算两道蓝桥杯例题,展示了递归的实际应用。掌握递归是学习深度优先搜索、动态规划等高级算法的基础。
2026-03-24 22:16:27
461
1
原创 蓝桥杯基础--模拟
本文详细解析了蓝桥杯及各大编程竞赛中必考的基础题型——“模拟”。模拟算法的核心在于“依题意行事”,即将题目给定的明确规则与物理流程,一步步精准翻译为计算机代码。该题型不依赖高深的数据结构或复杂公式,而是纯粹考察选手的代码逻辑实现能力与细心程度。文章指出,模拟题常带有细节繁多、代码量大以及强状态依赖的特征,极易出错。因此,在编码前先用草图理清变量更新与状态流转顺序是破题的关键。同时,文章结合三道真题剖析了实战技巧:《扫雷》展示了二维矩阵遍历中的防越界处理;《灌溉》强调了推演过程中的“状态隔离”策略,利
2026-03-24 21:18:41
624
1
原创 蓝桥杯基础--枚举
本文介绍了算法竞赛中基础的枚举算法及其应用。枚举通过穷举所有可能的解并逐一验证来解决问题,具有逻辑清晰、实现简单的优点。文章重点讲解了如何确定解空间范围,以及使用循环结构实现枚举的方法。通过三道蓝桥杯真题(特别数的和、反倍数、找到最多的数)展示了枚举算法的实际应用,包括数字筛选、条件判断和统计计数等技巧。这些例题演示了如何用for循环遍历解空间,结合条件判断或数据结构来高效解决问题。枚举算法在竞赛中既能独立解题,也能作为复杂问题的保底得分手段。
2026-03-24 21:15:18
492
原创 蓝桥杯基础--时间复杂度
本文系统讲解了算法竞赛中的时间复杂度概念及其应用。重点解析了从O(1)到O(N!)的常见复杂度类型,并揭示了蓝桥杯"一秒法则"(1秒处理10^8次操作)的实战意义。特别强调通过题目数据范围反推算法复杂度的方法,提供了数据规模与算法选择的对应关系表。最后分享了蓝桥杯特有的部分分策略,建议在无法优化时果断采用暴力解法获取基础分。掌握这些核心技巧,能有效避免TLE并提升竞赛成绩。
2026-03-24 21:13:43
560
原创 力扣--分治(归并排序)算法题II:计算右侧小于当前元素的个数,翻转对(无痛通关困难题)
本文介绍了力扣上两道利用归并排序解决的分治算法题:1. 计算右侧小于当前元素的个数,通过降序归并排序并记录元素原始下标,统计每个元素右侧较小元素的数量;2. 翻转对问题,使用升序或降序归并排序结合双指针技巧,统计满足i<j且nums[i]>2*nums[j]的逆序对数量。两种解法都利用了归并排序的特性,在合并过程中高效统计目标值,时间复杂度均为O(nlogn)。文章详细讲解了两种策略的实现思路和关键代码逻辑。
2026-03-22 21:36:44
334
原创 力扣--分治(归并排序)算法题I:排序数组,交易逆序对的总数
本文介绍了两种基于分治思想的排序算法:快速排序和归并排序。快速排序采用前序遍历方式,通过选定基准值进行划分,平均时间复杂度为O(NlogN),但最坏情况下会退化为O(N^2)。归并排序采用后序遍历方式,通过递归拆分和有序合并实现,时间复杂度稳定为O(NlogN)。文章详细分析了两种算法的区别,包括处理顺序、空间复杂度、稳定性等,并提供了归并排序的优化实现。此外,还展示了如何利用归并排序思想解决"计算逆序对"问题,给出了升序和降序两种策略的代码实现。这些算法体现了分而治之的核心思想,通过将
2026-03-22 12:57:26
382
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅