- 博客(34)
- 收藏
- 关注
原创 算法练习:差分
如果模拟每一次移动(例如从城市 1 走到城市 100),并对沿途每一段铁路的计数器加 1,时间复杂度会非常高,最坏情况下是。如果要边操作边还原的话,差分数组就没用了,就可能要用到我们后面将要学的线段树之类的算法来解决。差分数组使用的时候,所有的操作必须全部进行完毕之后,才能还原出操作之后的数组。利用二维差分数组,我们可以将对“一个区域”的修改,转化为对“四个点”的修改。我们需要对其求前缀和,才能得到每段路实际被经过的总次数。将区间的修改操作(一段路经过次数 +1)的时间复杂度从。
2025-11-25 22:52:50
821
原创 算法练习:滑动窗口专题
1. 核心思想 💡问题定义:滑动窗口思想:迭代逻辑:步骤 A: 扩张窗口 (Expand)步骤 B: 收缩窗口 (Contract)只要 仍然 ≥\ge≥ ,我们就持续收缩 指针并更新 。当 时, 循环停止, 指针将继续向右扩张。2. 算法分解步骤一:初始化:初始化窗口的和为 0。:初始化最小长度为一个 “无穷大” 的值。这是为了确保第一次找到有效窗口时, 函数能正确地将其长度存入 。步骤二:扩张窗口 (外层循环): 和 指针都从 0 开始。: 指针作为循环的 “驱动者”,它会遍
2025-10-26 00:09:46
966
原创 算法练习:位运算专题
1. 核心思想 💡问题定义:计算一个正整数n在其二进制表示下有多少个1。核心技巧n - 1这个操作会做什么?它会使n的二进制表示中最右边的那个1变为0,并且那个1之后的所有0都变为1。n = 12(二进制...1100n-1 = 11(二进制...1011(按位与) 会发生什么?----------...1000 (结果是 8)结论这个操作,其唯一的效果就是将n中最右边的那个1翻转为0。算法思路我们可以利用这个技巧,在while循环中不断地 “消除”n中最右边的1。每消除一个1,计数器。
2025-10-25 11:10:50
564
原创 算法练习:前缀和专题
中心下标” (Pivot Index) 是指这样一个索引:该索引左侧所有元素(不包括该索引自身)的总和,等于该索引右侧所有元素(不包括该索引自身)的总和。如果数组存在多个中心下标,则返回最左边的那一个。如果不存在,则返回 -1。
2025-10-23 22:11:09
564
1
原创 算法练习:二分查找专题(进阶)
如果你发现某个题目有某种规律(二段性),可以把数组分成两个区间,其中可能左边的区间小于目标值,右边的大于目标值(数组有序的情况下)就可以用二分查找算法,即便是数组无序,满足二段性,也可以用二分查找算法。值得注意的是二分查找算法说难也难,说简单也简单,它是最容易写出死循环的算法,但是只要你理解,他就是最简单的二分查找算法像滑动窗口一样都有一定的模板。
2025-09-26 18:35:52
734
1
原创 Linux基础开发工具
掌握Linux开发工具是成为高效开发者的关键,本指南将带你系统学习yum、vim、gcc、Makefile、进度条编程、git和gdb等核心工具。
2025-09-21 16:23:15
1172
原创 C++:红黑树详解
如果p是g的左,c是p的右,那么先以p为旋转点进行左单旋,再以g为旋转点进行右单旋,再把c变黑,g变红即可。:c为红,p为红,g为黑,u不存在或者u存在且为黑,u不存在,则c⼀定是新增结点,u存在且为黑,则c⼀定不是新增,c之前是黑色的,是在c的子树中插入,符合情况1,变色将c从黑色变成红色,更新上来的。:c为红,p为红,g为黑,u不存在或者u存在且为黑,u不存在,则c⼀定是新增结点,u存在且为黑,则c⼀定不是新增,c之前是黑色的,是在c的子树中插入,符合情况1,变色将c从黑色变成红色,更新上来的。
2025-09-20 00:33:27
821
原创 C++:AVL树详解
AVL树是最早的自平衡二叉搜索树,由苏联科学家Adelson-Velsky和Landis于1962年提出(简称AVL)。是空树,或同时满足:左右子树都是AVL树左右子树高度差的绝对值不超过110 (高度差=|1-2|=1)/\5 15→ 合法AVL树/\2 7。
2025-09-20 00:32:00
1199
原创 C++面向对象编程的特性:多态
多态是面向对象编程的三大特性之一,它能让代码更灵活、更易于扩展。本文将通过生活实例和代码示例,带你彻底理解C++多态的核心原理。
2025-09-20 00:25:36
943
原创 Linux权限详解:从基础到实践
权限是指在特定环境中,用户或系统对资源(如文件、应用程序、网络或设备)的访问和操作的合法范围。换言之就是能不能访问该资源的问题比如你有腾讯视频的会员,你就可以看vip视频,这就是你的权限权限 = 人 + 文件属性权限是针对特定人群的 -->普通用户和超级用户(root)目标主体(Linux下一切皆文件,即文件),必须天然具备对应属性(读、写、可执行)才可以访问普通用户和超级用户超级用户绝大多数情况下不受权限约束,属于特权阶级。
2025-09-01 20:48:05
830
原创 C++面向对象编程的特性:继承
想象一下,学生和老师都是“人”,他们都有姓名、年龄,都需要身份认证;但学生有学号,需要学习;老师有职称,需要授课。这种“共性(人)+ 个性(学生/老师)”的关系,在C++中可以用继承(Inheritance)机制来实现。继承允许我们将共同属性和行为放到一个“基类(父类)”中,然后让“派生类(子类)”继承基类的所有成员,再添加自己的独有属性和行为。这样一来,派生类不需要重复写基类的代码,大大减少了冗余。尽量用public继承:它最符合“is-a”关系,也是实际开发中最常用的;避免菱形继承。
2025-08-12 19:28:22
916
1
原创 C++模板进阶:从“通用”到“特殊”的修炼之路
优点代码复用:一份模板可以处理所有类型,避免重复写类似代码(比如STL的vectorsort灵活性:通过特化和偏特化,可以处理特殊情况,兼顾通用和特殊。缺点代码膨胀:每个模板实例化都会生成一份独立的代码(比如和是两个不同的类),会增加可执行文件的大小。编译慢:模板的编译需要处理大量的类型推导和实例化,比普通代码慢。错误信息难懂:模板出错时,编译器会输出一堆“模板参数推导失败”“未匹配的函数模板”之类的错误,新手很难定位问题。模板是C++中最强大的特性之一,也是STL的基础。通过模板,你可以写出。
2025-07-30 16:25:12
882
原创 C++ List容器:核心技术解析及其模拟实现
list是STL中的序列式容器(元素按顺序排列),底层采用双向循环链表实现。数据域(存储元素值);前驱指针(指向前一个节点);后继指针(指向后一个节点)。双向循环每个节点都能找到前后节点;链表首尾相连(最后一个节点的next指向头结点,头结点的prev指向最后一个节点)。list需要频繁在中间位置添加/删除元素(比如实现一个可动态调整顺序的任务列表);不需要随机访问元素(比如只需要遍历或头尾操作)。如果你的场景是频繁随机访问(比如取第100个元素),请用vector;如果是频繁插入删除。
2025-07-30 16:06:24
902
原创 Linux基础命令详解:从入门到精通
本文整理了Linux系统中最常用的基础命令,每个命令都配有详细说明和具体示例,帮助你快速掌握Linux操作技巧。文章中用的终端是XShell,系统是Centos。
2025-07-20 21:05:11
892
4
原创 C++:Vector类核心技术解析及其模拟实现
initializer_list是一个类,使用时要包含头文件 #include <initializer_list>我们自己写的迭代器区间构造又缺陷,如果我们的实例化类型不是迭代器类型,比如是int,那么我们解引用的时候就会出问题。vector是C++标准模板库(STL)中的动态数组容器,能够存储相同类型的元素。对比string你会发现STL这些容器的有些接口名字相同,功能也类似,大大减小了我们的学习成本。针对这个问题,库里使用一种名为"萃取"的技术,了解即可。:预分配空间(不初始化元素)
2025-07-16 14:34:12
905
原创 C++: STL简介与string类核心技术解析及其模拟实现
动态内存管理深/浅拷贝操作符重载迭代器设计等C++核心概念。需知我们模拟实现不是为了造一个更好的轮子,已经有人给我们造出来了,我们直接使用就行了,关键在于学习人家的思路和想发,以及了解底层是如何工作的。
2025-06-01 23:23:58
1222
1
原创 C++内存管理与模板初阶详解:从原理到实践
int _top;// 类外定义成员函数// 实例化// Stack是类名,Stack<int>才是类型// 存储int的栈// 存储double的栈类模板实例化与函数模板实例化不同,类模板实例化需要在类模板名字后跟<>,然后将实例化的类型放在<>中即可,类模板名字不是真正的类,而实例化的结果才是真正的类。内存管理:理解栈、堆等区域的区别,掌握new/delete与的适用场景。模板机制。
2025-05-08 13:10:38
1004
3
原创 C++类与对象深度解析:从基础到应用
类是C++封装数据与行为的核心单元,通过class或structpublic: // 公有成员,外部可访问private: // 私有成员,仅类内访问// 成员变量习惯加前缀_或m访问限定符public:类外可直接访问。privateprotected:类外不可直接访问(默认class为privatestruct为publicC++类与对象通过封装、构造/析构、拷贝控制等机制,提供了强大的面向对象能力。深入理解this指针、静态成员、初始化列表等高级特性,能够写出高效且安全的代码。
2025-05-05 22:52:38
1278
2
原创 C++入门基础:从零开始掌握高效编程语言
C++虽然学习曲线陡峭,但其高性能和底层控制能力使其在关键领域不可替代。通过系统学习语法、理解设计思想,并持续实践,我们一定能驾驭这门强大的语言。
2025-04-26 11:04:18
777
原创 深入理解常见排序算法:从原理到实践
排序是将一组记录按照某个或某些关键字的大小,以递增或递减的顺序重新排列的过程。购物筛选:按价格从低到高排序商品。院校排名:按总分从高到低排列高校。排序算法的选择需综合考虑数据规模、数据特征和应用场景。本文详细讲解了常见排序算法的原理、实现及优化方法,并通过代码示例和性能对比帮助读者深入理解。掌握这些知识后,可以灵活选择适合的算法解决实际问题。
2025-04-17 16:59:27
1995
1
原创 二叉树详解:从结构到应用
二叉树是每个节点最多有两个子节点的树,且严格区分左右子树。节点的度不超过2左右子树有序,交换左右子树会生成不同的二叉树注意:对于任意的⼆叉树都是由以下几种情况复合而成的特殊二叉树满二叉树:每一层节点数达到最大,深度为k,节点数为 (2^k -1)⼆叉树性质根据满二叉树的特点可知:(1)若规定根节点的层数为 1 ,则⼀棵非空二叉树的第i层上最多有 2^i−1 个节点(2)若规定根节点的层数为 1 ,则深度为 h 的二叉树的最大节点数是 2^h−1。
2025-04-12 14:26:09
1201
2
原创 栈与队列:从概念到实现,再到算法应用
栈(Stack)和队列(Queue)是数据结构中最基础且重要的两种线性结构,广泛应用于算法设计、系统开发等领域。本文将从基本概念、实现方式到经典算法题解析,带你全面掌握栈与队列的核心知识。相信通过上面的概念讲解和例题,你已经学会了栈和队列的基本构造与使用,快去练习吧!采用数组+双指针法,通过牺牲一个存储单元区分队列空/满状态。栈的底层通常用数组(链表也可以)实现,支持动态扩容。队列结构(含头尾指针)获取队列中有效元素个数。获取栈中有效元素个数。
2025-04-07 11:10:53
621
原创 算法复杂度与顺序表:从理论到实战指南
时间复杂度描述了算法运行时间随数据规模增长的变化趋势,使用大O渐进表示法保留最高阶项:例如的时间复杂度为O(n²)。忽略常数系数:例如T(n) = 2n的时间复杂度为O(n)。常数项用1表示:例如T(n) = 100的时间复杂度为O(1)。算法复杂度是代码优化的核心工具,需熟练掌握大O表示法。顺序表适用于频繁随机访问的场景,但需权衡插入/删除效率与空间利用率。动态顺序表通过合理扩容策略提升灵活性。
2025-03-16 22:04:09
2214
原创 C语言程序编译和链接:从源码到可执行文件的奇妙之旅
本文将深入探讨C语言程序的编译和链接过程,结合预处理、编译、汇编、链接的四大阶段,详解其背后的机制,并通过代码示例和命令行工具演示每个阶段的具体行为。参考经典书籍《程序员的自我修养》,帮助读者深入理解程序构建的全流程。
2025-03-13 15:55:27
2330
原创 C语言文件操作入门指南:从零掌握文件读写
掌握文件操作,能让你的程序更强大、更实用!区分文本文件和二进制文件的用途。打开文件后必须关闭,避免资源泄露。随机读写时灵活使用fseek和ftell。始终检查文件操作是否成功(如pf!= NULL通过实际代码练习,你将快速掌握文件操作的核心技能。
2025-03-11 13:02:09
1147
原创 深入理解C语言自定义类型:结构体、联合与枚举
结构体:组织复杂数据,需关注内存对齐;联合体:共享内存,适用于类型转换或节省空间;枚举:提高可读性,替代无意义字面量。掌握这些自定义类型,能够更高效地管理内存和设计数据结构,为开发高性能、可维护的C程序奠定基础。
2025-03-10 16:34:19
891
原创 C语言:内存函数与数据存储详解
内存函数memcpy用于非重叠拷贝,memmove可处理重叠,memset初始化内存,memcmp比较内存。数据存储:整数用补码,浮点数按IEEE 754标准,大小端影响多字节数据的存储顺序。理解这些知识,能帮助开发者避免内存错误,优化程序性能,并深入理解计算机底层工作原理。
2025-03-09 21:51:20
1387
1
原创 C语言字符串处理:从入门到实战指南
以上函数会用即可,掌握这些函数,你就能轻松应对C语言中90%的字符串处理需求!字符分类函数用于判断字符的类型(如字母、数字、空格等)。:返回子字符串首次出现的位置,未找到返回。:非0表示符合条件,0表示不符合。:根据错误码返回描述信息。有兴趣的可以去了解一下。:按分隔符分割字符串。
2025-03-06 20:42:33
1152
原创 基于C语言的扫雷游戏设计与实现
我从这个项目实践中意识到思考问题要全面,要尽可能的包含每一种可能性,满足不同的需求,并且一定要多画图和上手敲代码!
2025-02-25 22:08:47
537
原创 深入理解C语言指针:从入门到精通
指针是C语言的灵魂,它直接操作内存,带来高效与灵活,但也需要谨慎使用。内存与地址的关系。指针类型决定步长与权限。避免野指针。数组与指针的微妙联系。
2025-02-23 14:31:26
550
1
原创 C语言:分支与循环(附代码实战)
结构类型适用场景特点说明if单条件判断简单直接switch多分支等值判断需配合break使用while不确定循环次数的场景先判断后执行for明确循环次数的场景初始化-条件-更新三位一体do-while至少执行一次循环体的场景先执行后判断。
2025-02-02 20:29:18
289
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅