自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(83)
  • 收藏
  • 关注

原创 应用层自定义协议与序列化 网络计算器的实现(1)

摘要: 本文探讨了网络计算器的实现逻辑,重点解析了应用层协议设计、TCP/UDP通信差异及Socket封装技术。应用层协议通过序列化/反序列化实现结构化数据传输,确保报文完整性。TCP基于字节流通信,需处理数据分片问题,而UDP是无连接的独立数据报传输。通过封装Socket类抽象底层系统调用,简化TCP/UDP的创建、绑定和监听流程,提升代码复用性。文中还对比了TCP的面向连接特性(需listen/accept)与UDP的无状态通信模式,并给出C++实现示例,强调错误处理与日志记录的重要性。 关键词: 网络

2026-02-08 16:32:28 272 2

原创 网络基础:初识TCP/IP协议

网络协议分层与通信原理摘要 本文系统介绍了网络协议的分层架构与通信机制。协议本质是计算机间的约定,通过分层(如OSI/TCP/IP模型)实现解耦,每层协议如同结构体,确保同层通信。TCP/IP协议作为网络长距离通信的解决方案,其分层设计基于问题可分层性,与操作系统深度集成。 局域网通信通过MAC地址标识主机,数据以广播形式传输,需避免碰撞(以太网为临界资源)。IP地址管理全局主机唯一性,与MAC地址协同完成路由(IP不变,MAC逐跳变化)。数据包封装与分用过程类似栈操作,底层协议通过报头分离有效载荷并向上交

2026-02-04 10:23:35 1188

原创 算法日记:穷举vs暴搜vs深搜vs回溯vs剪枝--全排列

文章摘要: 本文探讨了全排列问题的两种解法,分别针对无重复元素(LeetCode 46)和有重复元素(LeetCode 47)的数组。通过决策树分析,采用深度优先搜索(DFS)实现穷举,利用path数组记录路径,check数组剪枝避免重复使用元素。对于有重复元素的场景,需先排序数组,并通过条件check[i] == false && (i==0 || nums[i]!=nums[i-1] || check[i-1]==true)确保合法分支进入递归,避免重复排列。代码展示了回溯时恢复现场的关

2026-02-04 09:48:53 391

原创 进程间通信:system V消息队列 信号量 互斥同步初识(2)

本文介绍了System V IPC机制中的共享内存、消息队列和信号量。共享内存是最快的进程通信方式,通过shmget创建、shmat连接、shmdt分离和shmctl控制。消息队列通过msgget等接口实现类型化数据传输。信号量用于保护共享资源,通过互斥和同步机制确保临界区安全访问,避免数据不一致。所有机制都使用key标识资源,生命周期随进程。

2026-01-12 21:53:05 637 16

原创 进程间的通信(1)(理解管道特性,匿名命名管道,进程池,system V共享内存是什么及优势)重点理解代码!

摘要: 本文探讨了进程间通信(IPC)的必要性及其实现方式,重点介绍了管道(匿名管道和命名管道)的原理与应用。匿名管道用于父子进程通信,通过文件描述符继承实现数据共享,具有同步机制和单向通信特性。命名管道则允许无关进程通过同一文件路径访问共享资源。文中提供了代码示例,展示父子进程如何通过管道进行读写操作,并讨论了管道特性、四种通信情况以及进程池负载均衡的实现。最后,通过服务器端代码示例说明了命名管道的创建与文件操作流程。 关键词: 进程间通信、匿名管道、命名管道、进程池、文件共享

2026-01-11 15:59:06 1100 11

原创 算法日记分治:用归并排序解决逆序对问题

文章摘要: 本文介绍了利用归并排序解决数组中逆序对问题的两种策略。策略一通过升序数组统计当前数之前比它大的数的个数,策略二通过降序数组统计当前数之后比它小的数的个数。两种方法均通过分治思想实现,时间复杂度为O(nlogn)。代码示例分别展示了升序和降序归并排序的实现,核心步骤包括递归划分、合并有序子数组及逆序对统计。适用于算法学习及面试准备场景。 关键词:逆序对、归并排序、分治算法、升序/降序统计、时间复杂度优化

2026-01-06 23:38:39 472 13

原创 库的原理和制作 动态库如何和可执行程序相关联,为什么程序入口点不是main函数,GOT表,PIC地址无关代码(2)

摘要: 本文探讨ELF程序的加载机制与进程地址空间管理。ELF文件在磁盘上已通过虚拟地址统一编址,程序入口地址记录在ELF header的Entry字段。进程创建时,操作系统初始化PCB和页表,建立虚拟地址到文件的映射。CPU通过虚拟地址访问指令,触发缺页异常后加载物理内存并更新页表。动态库通过共享区映射实现多进程共享,节省内存和磁盘空间,其只读代码段可被映射到同一物理页。 关键词: ELF加载、虚拟地址、页表、动态库共享、缺页异常

2026-01-06 21:02:02 1543 15

原创 深入理解库、静态库、动态库与ELF文件格式,CPU执行流程(1)

文章摘要 本文详细介绍了Linux系统中库的概念、分类及使用方法。静态库(.a/.lib)在编译链接时嵌入可执行文件,具有独立性强但体积大的特点;动态库(.so/.dll)在运行时加载,支持多进程共享且更新方便。文章通过具体命令演示了静态库的制作(ar -rc)和使用(gcc -L -l),以及动态库的生成(gcc -shared)和路径配置方法(LD_LIBRARY_PATH)。同时指出gcc默认使用动态库,静态链接需加-static选项,并强调Linux系统通常优先安装动态库。最后总结了库与应用程序的依

2026-01-05 21:51:00 1875 46

原创 算法日记:分治-快排(颜色分类,排序数组,数组中的第k个最大元素 面试题17.14.最小k个数)

本文介绍了三种经典排序算法及其应用: 颜色分类:使用三指针法将数组划分为0、1、2三个区域,通过交换元素实现排序。 快速排序:通过随机选取基准值划分数组,递归处理子区间,时间复杂度平均为O(nlogn)。 归并排序:分治思想,合并有序子数组,稳定排序,适合链表等结构。 第K大元素:结合快速选择算法,通过三路划分快速定位目标元素,优化搜索效率。 代码示例展示了算法实现,适用于LeetCode等编程题解。

2026-01-05 16:40:59 923 6

原创 算法日记:模拟(提莫攻击,替换所有的问号,Z字形变换,外观数列,数青蛙)

算法专栏摘要 胖咕噜的稞达鸭开设了《数据结构》《C++初阶高阶》《Linux系统学习》《算法日记》等专栏,专注于技术分享。近期更新内容包括: 字符串处理:通过遍历和条件判断替换字符串中的问号,确保无连续重复字符(LeetCode 1576)。 时间区间计算:模拟提莫攻击的中毒状态,统计总中毒时长,注意重叠区间的处理(LeetCode 495)。 规律模拟:Z字形变换通过数学规律直接定位字符位置,避免矩阵填充(LeetCode 6)。 双指针应用:外观数列问题使用双指针统计连续字符个数并生成新字符串(Leet

2026-01-03 17:11:30 613 18

原创 Linux系统编程:文件系统(CHS LBA地址,Block Group 软硬连接,手搓简化版本的FILE结构体)

摘要 本文实现了一个简化版FILE结构体,模拟C标准库的文件操作功能。核心内容包括: 缓冲策略: 无缓冲(NONE_FLUSH):数据直接写入文件 行缓冲(LINE_FLUSH):遇换行符时刷新 全缓冲(FULL_FLUSH):缓冲区满时刷新 关键实现: 使用MyFile结构体封装文件描述符、缓冲区和刷新策略 提供MyFopen/MyFclose等基础文件操作接口 通过write和fsync系统调用实现数据持久化 设计要点: 缓冲区减少系统调用次数 支持多种文件打开模式(w/a/r) 行缓冲模式模拟终端输出

2026-01-03 17:07:52 1681 32

原创 【Linux系统编程】解密环境变量与进程地址空间

本文深入探讨了Linux程序的运行环境和内存管理机制。首先解析了命令行参数和环境变量的作用,通过代码示例展示了如何利用环境变量限制程序运行权限。随后揭示了进程地址空间的奥秘,指出程序访问的是虚拟地址而非物理地址,并通过写时拷贝机制实现进程独立性。最后阐述了虚拟地址的三大优势:保障内存安全、解耦进程与内存管理、提供标准化地址空间。文章指出,理解虚拟地址和页表机制是掌握Linux系统编程的关键,这些底层设计既保证了进程隔离又高效利用内存资源。

2025-12-24 21:46:43 1093 11

原创 【C语言进阶】死磕指针:从内存原理到指针数组的深度解析

摘要: 本文系统梳理C语言指针的核心概念与难点,涵盖内存与指针基础、指针运算、const修饰、指针与数组关系等内容。重点解析指针类型的底层意义(步长与解引用权限)、野指针成因与规避、数组名本质及传参退化问题。同时提供9个高频面试考点,包括指针大小、const修饰差异、二级指针等关键细节,帮助开发者深入理解指针机制并规避常见错误。

2025-12-24 21:45:54 998 5

原创 算法日记专题:位运算II( 只出现一次的数字I II III 面试题:消失的两个数字 比特位计数)

力扣链接将数组中所有元素都异或在一起,除了某个元素只出现一次以外,其余每个元素均出现两次。最终异或的结果就是所求。

2025-12-20 11:09:24 691 2

原创 算法日记专题:位运算I(汉明距离I II 面试题:判断是不是唯一的字符 丢失的数字 两个整数相加)

汉明距离力扣链接题解:这两个数字对应二进制位不同的位置的数目。解题思路:先异或,求出异或和,异或(相同为0,相异为1)。所以汉明距离本质上找的就是汉明距离 = 两个数异或结果的二进制表示中 1 的个数。方法一:求异或和ret二进制表达中每一位数字是否为1,如果是1就加起来;public://求出异或和//x和y中不同位置的数字到底有几个while(ret!= 0)//从异或和的最低位开始依次看//如果二进制位1,就加到count中ret >>= 1;//右移一位。

2025-12-20 11:08:34 742 5

原创 算法入门:专题前缀和:一二维前缀和 寻找数组的中心下标 除自身以外数组的乘积 和为k的子数组 和可被k整除的子数组 连续数组 矩阵区域和

文章摘要 本文介绍了前缀和在算法中的应用,包括一维和二维前缀和的实现方法。通过代码示例展示了如何计算区间和、乘积以及寻找数组中心下标等常见问题。重点讲解了前缀和与哈希表结合解决子数组和问题的技巧,如LeetCode中的“和为k的子数组”题目。文章提供了清晰的代码实现和解题思路,适合算法初学者学习前缀和的相关应用。

2025-12-13 23:27:32 684 2

原创 基础IO 文件在内核中是怎么被管理的 重定向的含义 在自定义shell中加入重定向

摘要: 本文探讨了Linux系统下文件操作的核心机制。通过C语言示例代码,演示了使用系统调用open、write、read实现文件的创建、写入、追加和读取功能。关键点包括: 文件操作本质是进程通过系统调用(如open)与磁盘交互,库函数仅封装底层接口 权限控制:umask影响文件最终权限(0666 & ~umask) 三种基础操作模式:清空写入(O_TRUNC)、追加(O_APPEND)、只读(O_RDONLY) 文件描述符(fd)是操作系统管理文件的标识符 实现类cat命令的简易文件读取逻辑,展示

2025-12-01 22:37:05 1557 58

原创 算法入门:专题二分查找算法 模板总结 题目练手 :排序数组中查找元素的第一个和最后一个位置 第一个错误的版本 查找x的平方根 搜索插入位置 山脉数组的封顶索引

二分查找算法总结 核心要点 朴素二分查找:适用于有序数组,时间复杂度O(log n) 边界查找:处理排序数组中重复元素的第一个和最后一个位置 关键细节: 防止整数溢出:使用left+(right-left)/2计算中点 循环条件选择:left<=right或left<right 中点取法:左端点取左中点,右端点取右中点 算法模板 朴素二分: while(left target) right=mid-1; else if(nums[mid] 查找左端点: while(left 查找右端点: whi

2025-12-01 22:18:13 1033 23

原创 算法入门:滑动窗口--->找到字符串中所有的字母异位词,串联所有的子串,最小覆盖子串

文章摘要 📌 算法解析:字符串匹配与滑动窗口技巧 本文探讨了三种字符串匹配问题的高效解法,均基于滑动窗口+哈希表优化: 字母异位词查找:通过固定窗口大小比较哈希表字符频次,利用count统计有效字符,窗口滑动时动态维护哈希表,时间复杂度优化至O(n)。 串联子串匹配:将单词视为单位,按单词长度分步滑动窗口,多次遍历确保覆盖所有可能起始位置,避免遗漏组合。 最小覆盖子串:可变窗口扩展至包含目标字符后收缩左边界,通过哈希表频次对比和count验证覆盖性,确保找到最短子串。 🔑 核心优化:通过哈希表记录字符/

2025-11-27 23:09:15 617 28

原创 自定义shell命令行解释器自制

Shell原理与实现摘要 本文实现了一个简易Shell,核心原理是通过环境变量继承与进程管理(fork+exec)模拟命令行交互。关键模块包括: 环境变量管理 独立维护g_env数组,深拷贝系统environ实现隔离 支持PWD等变量动态更新(getcwd+putenv) 命令解析与执行 参数表g_argv存储解析后的命令及参数 内建命令如cd直接调用chdir,外部命令通过fork-exec启动 交互功能 动态提示符显示用户/主机/目录信息 别名系统(unordered_map存储)简化常用命令 通过循环

2025-11-27 18:35:22 1120 20

原创 MySQL在Centos 7 环境下安装

摘要 本文详细介绍了在CentOS 7.6系统上安装MySQL数据库的完整流程。主要内容包括:检查并卸载系统自带的mariadb/mysql环境,备份相关配置文件;通过官网下载MySQL 5.7的yum源安装包并配置本地yum源;使用rpm命令安装MySQL社区版服务端和客户端组件。文章提供了完整的命令行操作步骤和注意事项,帮助读者顺利完成MySQL环境的搭建,为后续数据库使用奠定基础。操作过程涵盖环境检查、软件包管理、yum源配置等Linux系统管理关键技能。

2025-11-22 15:16:51 845 30

原创 环境变量和程序地址空间 虚拟地址空间页表存在意义 附进程概念总结图干货云集

本文探讨了Linux系统中的环境变量和进程地址空间概念。环境变量是操作系统运行参数,存储在bash进程表中,可通过命令行参数表和环境变量表进行管理。文章介绍了获取环境变量的方法,如getenv函数,并演示了如何通过环境变量限制程序执行权限。在进程地址空间部分,解释了父子进程共享虚拟地址但独立物理空间的机制,通过页表实现虚拟地址到物理地址的映射。重点阐述了fork()创建子进程时如何拷贝父进程的task_struct,以及写时复制技术如何保证进程独立性,即当子进程修改变量时会创建新的物理页并更新映射关系。这些

2025-11-22 15:06:28 1170 16

原创 包管理器,yum工具,vim编辑器常见指令,解决sudo权限问题,Linux项目自动化构建工具-make/Makefile

本文介绍了Linux系统中软件包管理工具yum和vim编辑器的使用。主要内容包括:1)yum包管理器的功能与常用命令(安装、卸载、搜索软件等),以及Windows与Linux文件互传方法;2)vim编辑器的命令模式和底行模式操作技巧,包括光标移动、复制粘贴、批量注释等;3)gcc/g++编译器的工作流程(预处理、编译、汇编、链接),并对比分析了动态库和静态库的优缺点。文章还提供了vim配置方法和条件编译的实用案例,帮助开发者高效使用Linux开发工具。

2025-11-19 20:20:42 878 40

原创 进程状态,孤儿进程僵尸进程,Linux真实调度算法,进程切换

摘要:本文探讨了Linux进程状态管理与数据结构设计。通过运行队列和设备队列的双队列机制,操作系统实现进程调度与资源管理。进程状态包括运行(R)、阻塞(S/D)、挂起等,其中深度睡眠(D)可防止数据丢失。Linux采用list_head实现PCB的网状关联,支持多维度管理。僵尸进程(Z)保留了子进程退出信息供父进程查询。文章剖析了进程状态转换、阻塞/挂起机制及数据结构设计原理,并给出代码示例演示进程阻塞状态。

2025-11-19 19:59:15 1221 45

原创 进度条创建,版本控制器Git,如何从Linux系统下提交代码到gitee远程仓库,GDB调试指令

本文介绍了两种Vim批量注释方法及进度条实现。第一部分详细说明了Vim中使用Ctrl+V可视化块选择模式进行多行注释的操作步骤(包括选中行、插入#号和保存)。第二部分展示了进度条的实现代码,包含基础版本(process_v1)和结合下载场景的改进版本(FlushProcess)。改进版通过计算下载百分比动态更新进度条,搭配旋转动画,并支持自定义总大小和下载速度参数,最后输出下载完成信息。文中强调了fflush(stdout)对缓冲区刷新的重要性,并提供了完整的代码示例。

2025-11-17 23:44:12 828 8

原创 进程概念,冯诺依曼体系结构,系统调用,父子进程初解

摘要: 冯诺依曼体系结构由存储器、控制器、运算器和输入输出设备组成,数据流动需经过内存处理。操作系统作为软硬件管理核心,采用“先描述再组织”方式管理进程,通过系统调用接口提供安全访问。进程是正在运行的程序,由PCB(进程控制块)封装代码和数据,操作系统通过增删查改PCB链表管理进程。CPU与操作系统协同工作,确保程序高效执行。 关键词: 冯诺依曼体系、操作系统、进程管理、PCB、系统调用

2025-11-17 23:33:59 1558 31

原创 RAII智能指针底层实现 智能指针弊端引起循环引用 ,怎么解决内存泄漏问题

📝 智能指针与RAII机制解析 RAII机制:利用对象构造获取资源、析构释放资源,确保异常场景下资源自动回收,避免内存泄漏。 智能指针实现: RAII封装:智能指针通过构造函数获取资源,析构函数释放资源。 浅拷贝问题:多个指针管理同一资源时,默认浅拷贝会导致重复析构。 解决方案: auto_ptr:拷贝时转移所有权(不推荐,易悬空)。 unique_ptr:禁用拷贝,仅支持移动语义。 shared_ptr:引用计数(_pcount)跟踪资源持有者,析构时计数归零才释放资源。 weak_ptr:解决shar

2025-11-10 23:04:23 1525 27

原创 C++11 面试题插入(左值引用和右值引用的区别)移动构造和移动赋值C++新标准如何解决传值返回但对象销毁问题

🎯文章摘要 本文介绍了C++中的列表初始化、右值引用和移动语义。列表初始化支持内置类型和自定义类型的直接构造,通过{}简化对象创建,并详细分析了const引用对临时对象生命周期的延长机制。右值引用(&&)用于标识临时资源所有权,与左值引用的区别在于:右值引用允许移动语义优化性能,减少拷贝开销。通过代码示例演示了右值引用如何延长对象生命周期并支持修改,而const左值引用仅支持访问。最后讨论了函数重载中左值/右值参数的匹配规则,以及移动语义在避免深拷贝时的应用场景。核心结论:左值引用共享对象

2025-11-02 21:37:56 2547 61

原创 set/map刷力扣题/(哈希表+排序类型)仿函数和捕获-两种方法解决

本文分析了C++中set、unordered_set、map、unordered_map的底层实现与性能差异,并提供了三个高频算法题的解决方案: 容器特性对比: set/map基于红黑树,key需支持<比较,O(logN)复杂度,输出有序 unordered_set/unordered_map基于哈希表,key需支持哈希和==比较,平均O(1)复杂度,输出无序 算法题解: 前k个高频元素:哈希统计频率+sort自定义排序(仿函数或lambda) 字符频率排序:哈希统计后按频率降序+ASCII码排序 前

2025-10-30 22:03:40 1207 31

原创 类和对象深层回顾:(内含面试题)拷贝构造函数,传值返回和传引用返回区别

摘要:本文探讨构造函数的本质及其必要性,分析拷贝构造函数与普通构造函数的区别,并讨论传值返回与传引用返回的优劣。构造函数用于替代初始化函数,自动完成对象构建;拷贝构造函数解决默认浅拷贝导致的资源管理问题,需显式实现深拷贝。传值返回会产生临时对象调用拷贝构造,而传引用返回避免拷贝但可能引发野引用问题。通过Buffer类的实例分析,演示了深拷贝解决重复析构的方法,以及静态对象避免野引用的方案。 关键词:构造函数、拷贝构造、深拷贝、传值返回、传引用返回、资源管理

2025-10-29 16:34:54 1301 41

原创 算法入门:专题攻克二---滑动窗口3(将x减到0的最小操作数,水果成篮)

这篇文章介绍了LeetCode 1658题的解法,题目要求找到将整数x减到0所需的最小操作数,每次操作可以移除数组最左或最右元素。文章解析了题目要求,提出算法思路:通过滑动窗口寻找使剩余元素和等于sum-x的最长子数组长度,从而确定最小操作数。具体步骤包括:1)计算数组总和sum;2)初始化返回值ret=-1;3)使用双指针遍历数组,维护窗口内元素和Add;4)当Add等于目标值时更新ret;5)最后返回数组长度减去ret。文章附有C++代码实现,帮助读者理解解题过程。

2025-10-27 20:53:24 591 40

原创 封装map和set(红黑树作为底层结构如何实现map和set插入遍历)

摘要: 红黑树作为map和set的底层结构,通过泛型设计同时支持两种容器。关键点在于引入仿函数KeyOfT,用于提取键:set直接返回键本身,map从键值对中提取键。迭代器按中序遍历实现,插入操作返回pair<iterator, bool>,既定位元素又反馈插入结果。map的operator[]通过插入缺省值实现查找或修改,简化用法。红黑树迭代器需显式构造函数,维护节点与根的关系以支持遍历。设计巧妙融合泛型与仿函数,兼顾通用性与效率。 (149字)

2025-10-27 15:37:00 1639 64

原创 算法入门---专题二:滑动窗口2(最大连续1的个数,无重复字符的最长子串 )

文章摘要: 本文探讨了两种滑动窗口算法的经典应用:最大连续1的个数和无重复字符的最长子串。对于最大连续1问题,通过双指针与计数器结合,动态维护窗口内0的个数不超过k,优化暴力枚举为O(n)复杂度;对于无重复子串问题,利用哈希表记录字符频率,滑动窗口确保字符唯一性。两题均通过进窗口、判断、出窗口三步策略高效求解,代码实现简洁。文末附LeetCode题目链接与示例图解,帮助读者理解滑动窗口的核心思想——通过调整边界避免重复计算,提升算法效率。 关键词:滑动窗口、双指针、哈希表、算法优化、LeetCode

2025-10-24 21:22:14 815 28

原创 红袍加身:红黑树里的 “ 双色平衡艺术拆解(超详细图文详解) ”

红黑树插入操作解析 本文介绍了红黑树的基本规则、结构及插入操作的实现。红黑树通过颜色约束(根节点黑、红节点不相邻、路径黑节点数相同)保证平衡,插入时需根据父节点和叔叔节点的颜色进行不同调整: 变色处理:当父节点和叔叔节点均为红色时,将其变黑,祖父节点变红; 单旋+变色:父节点红且叔叔节点黑时,根据父子位置进行左/右单旋并调整颜色; 双旋+变色:父节点红且孩子节点与父节点方向相反时,先局部旋转再整体旋转并变色。 代码实现中,插入节点默认红色,通过循环向上调整违反规则的情况,最终确保根节点为黑色。红黑树的插入操

2025-10-23 20:52:15 1121 100

原创 AVL树手撕,超详细图文详解

摘要:《AVL树的结构与平衡操作》探讨了AVL树的节点结构及插入过程中的平衡维护机制。AVL树通过平衡因子(_bf)和父指针(_parent)确保平衡,节点结构包含键值对(_kv)和左右子树指针。插入时通过比较键值确定位置,随后更新平衡因子:右子树插入使_bf++,左子树插入使_bf--。当_bf为±2时触发旋转(左单旋/右单旋)以恢复平衡,旋转需处理子树链接并更新父节点关系。代码示例展示了节点定义、插入逻辑及旋转实现,强调通过调整子树高度差维持全局平衡性。关键词:AVL树、平衡因子、旋转、节点插入、数据结

2025-10-21 21:35:59 2021 37

原创 set_map的实现+set/map加持秒杀高频算法题锻炼算法思维

文章摘要: 本文介绍了C++中set和map容器的基本用法与实现原理。set基于红黑树实现,具有排序和去重功能,增删查效率为O(logN)。通过代码示例展示了set的构造、迭代器遍历、插入、删除及查找操作,并对比了multiset允许值冗余的特性。map的insert和operator[]方法详解了其插入、修改和查找的复合功能,强调[]既能修改值又能插入新键值对的特性。最后提及count、lower_bound等实用方法,适用于区间操作。整体内容结合代码演示,适合快速掌握这两种关联容器的核心用法。

2025-10-19 20:40:40 2934 128

原创 二叉树搜索树插入,查找,删除,Key/Value二叉搜索树场景应用+源码实现

摘要: 本文介绍了二叉树搜索树的基本概念与实现方法。二叉搜索树具有左子树小于根、右子树大于根的特性,最优情况下时间复杂度为O(log2N)。文章详细讲解了二叉树的插入、查找和删除操作,其中删除操作分为三种情况:叶子节点、单子节点和双子节点。对于复杂的双子节点删除,采用替代法进行处理。代码实现采用C++模板,通过递归和循环结合的方式完成操作,并提供了测试案例进行验证。文章还探讨了类设计中封装递归细节的重要性,确保用户友好性。(150字)

2025-10-16 19:41:57 1144 55

原创 算法入门:专题二---滑动窗口(长度最小的子数组)类型题目攻克!

📌 摘要: 本文讲解了长度最小的子数组问题(LeetCode 209题)。给定一个正整数数组和目标值target,需找到连续子数组使其和≥target,并返回最小长度。 🔍 解法分析: 暴力枚举:固定左边界,遍历右边界求和,但效率低(O(N²))。 滑动窗口(同向双指针):利用单调性优化,窗口动态伸缩,始终维护最小长度,时间复杂度O(N)。 💻 代码实现: 使用滑动窗口,left和right指针标记区间,通过sum累加和判断是否出窗口,更新最小长度len。 🚀 核心点: 滑动窗口的四步操作(进窗口、

2025-10-15 23:46:25 1151 21

原创 C++中的父继子承(2)多继承菱形继承问题,多继承指针偏移,继承组合分析+高质量习题扫尾继承多态

🔍 摘要: 本文探讨C++继承中的关键技术问题: 禁止继承的两种方法:父类构造函数私有化(子类无法调用)或使用final修饰父类。 友元与继承:友元关系不可继承,需在派生类中重新声明。 静态成员在继承体系中唯一,所有子类共享同一静态变量。 菱形继承引发二义性与数据冗余,通过虚继承(virtual)解决,但增加了复杂度。 多继承指针偏移:基类指针指向派生类时,地址因内存布局(声明顺序)可能不同,需注意类型转换时的隐式调整。 ⚡ 核心结论: 菱形继承应避免,虚继承慎用;多继承需警惕指针偏移问题,优先使用单一继

2025-10-15 21:41:37 1033 13

原创 算法入门:专题攻克一---双指针4(三数之和,四数之和)强推好题,极其锻炼算法思维

🎬 胖咕噜的稞达鸭 - 算法专栏解析 三数之和:通过排序+双指针法,固定一个数后转化为两数之和问题,注意去重处理(跳过重复元素)。核心代码使用双指针寻找和为 -nums[i] 的组合,并优化遍历过程。 四数之和:类似三数之和,先排序,再双层循环固定两个数,转化为两数之和问题。通过双指针找到剩余两数,确保和为 target-nums[a]-nums[b],同时处理重复元素。 个人主页 提供更多算法详解,如《数据结构》《C++初阶高阶》《算法入门》等专栏。 ⛺️ 技术的杠杆,撬动整个世界!

2025-10-14 10:31:24 1191 55

第10章+股票数据抓取分析系统.rar

第10章+股票数据抓取分析系统.rar

2025-10-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除