- 博客(51)
- 收藏
- 关注
原创 Linux(小项目)进度条演示
/ 更新进度, 按照下载进度,进行更新进度条。process.cvoid FlushProcess(double total, double curr) // 更新进度, 按照下载进度,进行更新进度条int i=0;for(;i < cnt;i++)//全局变量,使这个index不会每次都从0开始刷新。使得用户每次看到的很平滑//回车符,将光标移回行首 ,这样下一次打印会覆盖当前行,实现动态更新。
2025-12-10 21:57:41
1237
2
原创 算法训练.18
要注意的是,dp表里面的肯定是利润,所以说,这个初始化的第一个dp表里面的内容其实是-prices[0]。这道题目的话,给你一个nxm的数组,那么这个数组里面只要是l,o,v,e里面的其中一个,就可以加分,否则,就不加分,而且只能向下或者向右走,从左上角走到右下角,然后求出这个分值的最大值即可。那么其实通过阅读题目,你就会知道,其实,这个状态应该挺好分的,就是删除,跟再想想。并且,赢的话,就是w。我写的这个版本很复杂,然后,我写完之后,才发现,原来可以使用绝对值函数abs,哈哈哈哈·,好吧,我蠢了。
2025-11-04 16:03:55
1661
9
原创 Linux开发工具(二)
场景单条编译指令项目规模单文件或极简单项目多文件、复杂依赖、大型项目效率全量编译,耗时久增量编译,只更改变动文件可维护性指令零散,易出错规则集中管理,便于修改和扩展功能扩展仅能编译,无额外功能支持清理、安装、测试等多目标简单说,是为了解决 “手动编译复杂项目时的低效和混乱” 而设计的工具,小项目可能体现不出优势,但项目规模越大,其自动化和高效化的价值就越明显。
2025-10-05 19:43:26
1128
1
原创 Linux开发工具(一)
shift+g(G):光标从第一行到最后一行。gg:回到文本的开始n+shift+g:定位到任意一行(n为任意数字)。例如5+shift+g即为定位到第五行。
2025-09-29 21:17:04
756
3
原创 算法训练.16
对,就是这么简单,但是这样的话,还涉及到一个问题,就是咱们不需要再总的输入,然后再总的输出了。由于,每次去掉一个孩子的时候,那么都是从下一个孩子开始数的编号,即数到m-1.那么这样的话,1+m-1,就等于m,也就是说,dp[i-1]+m,就是当去掉获胜前一个孩子的时候,这个孩子距离获胜孩子的距离就是m。这个地方,那么咱们的前后两个端口都是1.并且,咱们可以发现,第n行(n>=3)开始,每一行的中间的元素都是等于n-1行的对应元素与对应元素的前一个元素的和。这个地方,注意咱们的j都是小于等于i的,因为。
2025-09-27 17:31:51
996
2
原创 Linux权限
问题:一个权限为- - -,那么这个可以删除吗请问?在指定目录下,一个其他人新建的文件(即便是root),不让rw。但是我们普通用户可以删掉。因为这是在我的目录下面但是这种情况在多种账号下不可能发生。因为若两个普通账号,一个连另外一个的家目录都进不去,怎么新建文件呢?(当然root除外)那么我们如果非得让多用户之间进行共享文件。(一定不会在任何用户的家目录下,因为进不去)所以只能在系统级别的路径下(比如根目录,根目录下除了用户之外的路径),反正避免用户家目录即可。
2025-09-22 22:22:10
1079
3
原创 暑期算法训练.14
理解这个题目的解法,咱们下一道题目还得用到这个解法。这道题目很是巧妙地运用了上一题的解法,大家可以仔细的研读一下这道题目,就是基本计算器II还是比较简单的,那个计算器I才是真的难,那个还得掌握逆波兰表达式等等的知识。等有时间出个专题再讲讲吧本题也是用到了相当多的知识,不过最重要的莫过于这个栈那么咱们今天的题目就讲解完了。关于栈这方面的,题目博主总结的并不是很完整。大家可以补充本篇完...................
2025-08-05 19:52:06
1301
3
原创 暑期算法训练.13
其实字符串类型的题目不只是字符串,还有其他相关的知识。比如模拟,等等这道题目其实使用其他的方法也是可以去做的这道题目其实还可以,下面这一道题目才是王炸这道题目可谓是真的锻炼你的代码能力以及边界处理能力本篇完..................
2025-08-02 20:24:42
1308
4
原创 暑期算法训练.12
本题基本就用到咱们之前所讲的那些东西,这里创建哈希表使用unordered_map,是因为这里有key以及val,不只是key基本也是用到了咱们开篇所讲的那些知识基本的重要的知识,学会运用,做题轻轻松松那么大体的思路基本就是这样,大家还是得利用好前面的知识才可以基本今天的题目就是这些,算是比较简单的。本篇完....................
2025-08-01 17:09:19
1509
4
原创 暑期算法训练.11
这道题目充分的利用了上面的知识,所以还得具备充分的知识储备才可以。其实这道题目也是用到了上面咱们所说的这些算法,大家还是得好好的参悟一下重点的东西还是开篇所讲的那些东西,还是希望大家要好好的研读,最好记住。今天的知识基本都用到了我在开篇所讲的那些知识本篇完.................
2025-07-31 20:52:19
1463
6
原创 暑期算法训练.10
归并排序是做后面题目的基础,大家还是搞定归并排序再来看后面的题目,本题还是有难度的,并且有参考价值,大家还是得好好的参悟一下这道题目还是很不错的,大家要仔细的理解一下今天的题量挺少的,但是知识量很大,所以大家仔细的研读一下....本篇完......
2025-07-29 19:30:55
1266
12
原创 暑期算法训练.9
代码量其实还是挺少的,只要还是看这个思路一定要掌握。其实这道题目还是运用了数组分三块加上随机产生基准值。大家以后写快速排序的时候,也可以这么写,这么写是比数组分两块来进行写,写的快的。这里涉及到了几个问题,我会在最后一个问题全部说清楚。好了,咱们今天的算法就讲到了这里,还是学到了不少有用的算法。
2025-07-26 17:48:48
1618
3
原创 暑期算法训练.8
基本的做题方法就是这样,注意:模拟的题一定要去找规律才可以。这道题基本就是这样的,咱们只需要掌握住题目的意思,根据这个意思去写就可以了。本道题就是你要是找不出规律,那很难做出来。你要是想不出来看下标,硬做,其实还是挺难的。本题就是得灵活的结合前面的只是才可以解决。这道题目还是很考验大家的算法能力的,以及代码的实现能力。
2025-07-25 18:19:10
751
3
原创 暑期算法训练.7
在讲解今天的算法题之前,咱们先来讲解一下这个位运算的常规运算,以便于咱们后面的使用。(这个运算其实挺重要的,关系到咱们后面习题的做题的速度)注意,一开始进入位运算,一般都是以0开始的。所以让bitMap=0;并且这里的运算,都是小范围的,就是bit为单位的运算。并且这里的for就相当于反复的循环了。我已3,0,1为例子,大家就明白了:ret^3^0^1^0^1^2^3,根据位运算的公式,是不是两个一样的可以消去。所以说,最后只剩下0^2,不就是2了嘛?本题没有什么特别的,只需要对位运算熟悉即可。
2025-07-24 19:04:25
1071
4
原创 暑假算法训练.6
到了后面,这种题做的多了,会发现路子其实都是一样的。博主也是用了很长时间才把这个给搞清楚,这个我感觉还是挺容易混的。所以大家一定要好好的看看,还差最后一个题,这类的做法做法的基本思路就总结出来了。那么咱们就来说明一下这类题目的做法,相信从前面几道题,大家已经看出来是怎么个办法了。就是先分析题目,找出方程式(创建前缀和数组),之后使用前缀和数组,算出结果。最重要的是最后要处理一下边界条件,基本都是这样的。边界条件基本就是最前面以及最后面。前缀和模板的题呢,还有3道,那么咱们明天再一起讲完。
2025-07-22 21:03:01
1262
原创 暑期算法训练.5
题目很好理解,就是让你找出目标值的开始以及结束的位置。不过这道题目要注意处理一下,空数组以及没有结果的情况。咱们来总结一下这类二分的模板:不用死记硬背,只需要记住一点:就是若是下面出现了-1,那么上面mid给它加上1就可以了。记住了求中点的方式,就可以推导出其他的了。这个起始也就是一种二分算法的模板而已。这道题目是用到了求左端点的模板。要注意分清楚,还是挺好抓住的。这道题目就不可以傻乎乎的再硬用了,需要分析一下为什么使用二分算法了。这道题目也是考你灵活的运用二分模板。
2025-07-21 22:23:30
1054
2
原创 暑期算法训练.4
总结下来还是滑动窗口的那些做题方法。本题还是挺有挑战性的。即使你的思路想出来了,但是如果说你的代码能力不够强,也还是写不出这样的代码的。还是得先真正的搞懂一道题目之后,才可以对类似的题目得心应手。处理好一些细节,就可以把一道题做的很好。这只是二分算法的一道开胃小菜。后面还有更大的礼物呢。
2025-07-19 22:13:46
1111
3
原创 暑期算法训练.3
这里还有一点需要强调的是:这个代码的时间复杂度可是O(N),N为数据个数。不是O(N^2),因为这里的right不回头,它只往右边走。left也只往右边走,这样的话,每一个数只被访问了2次,就是O(2N)。而咱们平常的O(N^2)是right从头开始了,所以说,left走到每一个元素的时候,前面的每个元素均被访问了一遍。滑动窗口的题目其实很简单。但是难的是,你要如何想到使用滑动窗口去做,还是要把握住那几点重要的特征才可以。对于这种求连续区间的,一般使用的都是滑动窗口来解决。
2025-07-17 19:50:17
1136
3
原创 暑期算法训练.2
对于很多的题来说,优化的算法都是在暴力的基础上进行改良的。所以咱们一开始想不到优化的解法,不用慌张,先写出来暴力解法,然后再仔细的分析。其实这道题也就是带我们认识到了单调性+双指针对于这类型题目的解法,为下面三道题打下了基础。这道题与上一道题的解法基本一致。这道题想要真正的自己用代码实现出来,真的挺不容易的。还是要多练习题目。题目之间都是相互连接的,咱们只有真正弄懂了一道题目,理解其中的解法,再遇到下一个题目的时候,才有应对之策,才能临阵不慌。...............本篇完。
2025-07-16 21:23:12
2274
2
原创 暑期算法训练.1
一般来说,可以暴力解决的题很少,基本上都要采取一点技巧,也就是优秀的算法。本题不同于其他的题目,本题要采用逆向的思维方法。并且要注意寻找最后一个复写数字的位置。使用快慢指针的时候,只需要将fast走两步即可。否则会导致代码冗余。这道题目其实就是运用了一个结论,只需要记住这个结论就可以将这道题做出来了。这道题主要是用到了快慢指针,但要是没想到这个方法,那可能不太好做。本篇完..................
2025-07-15 18:40:44
964
5
原创 C++智能指针(详细解答)
什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存,⼀般是忘记释 放或者发生异常释放程序未能执行导致的。内存泄漏并不是指内存在物理上的消失,而是应用程序分 配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的危害:普通程序运行⼀会就结束了出现内存泄漏问题也不大,进程正常结束,页表的映射 关系解除,物理内存也可以释放。长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服 务、长时间运行的客户端等等,不断出现内存泄漏会导致可用内存不断变少。
2025-06-17 19:42:01
942
4
原创 C++异常(含最全的例子)
咱们不管在做什么事情的时候,都有犯错的时候,那么编译器也是,编译器也得需要检测你写的代码是否有错误,如果有错误,需要给你提示出来。而一般C语言主要通过错误码的形式处理错误,错误码本质就是对错误信息进行分类编号,拿到错误码以 后还要去查询错误信息,比较麻烦。所以,咱们在C++方面引入了异常(其实不光C++有,java等语言也有,因为这个异常确实很好用)。
2025-06-10 14:10:18
921
6
原创 C++11——新语法,新特性(怒肝三万七千字,详细解答)
其实在C++11之前,也就是只有C++98,C++03 这样的小版本进行小的改动,直到C++11,才进行了一个比较大的改动,增加了不少锦上添花的特性,也增加了不少雪中送炭的新语法。下面就跟着作者来一探究竟吧。
2025-06-09 19:42:21
1328
4
原创 Linux基础指令(一)
其实咱们大多数知道的路径分为相对路径,以及绝对路径。Linux也是这样的。大家不要以为这个知识很新,不容易接受,其实不是这样的。放轻松,因为这个路径在很多的科目中都有介绍。路径是什么?就是从某个位置,到我当前所处的位置,之间经过的就是路径。理解路径存在的意义:树状组织方式,都是为了保证快速定位查找到指定的文件,而定位文件就 需要具有唯⼀性的方案来进行定位文件。其中任何一个节点,都只有⼀个父节点,所以,从根目 录开始,定位指定文件,路径具有唯一性。
2025-05-28 14:53:46
1241
6
原创 C++——STL——unordered_map与unordered_set的使用以及使用哈希表封装unordered_map/set
1.unordered_set的声明如上,Key就是unordered_set底层关键字的类型默认要求Key支持转换为整形,如果不支持或者想按自己的需求走可以自行实现支 持将Key转成整形的仿函数传给第二个模板参数t默认要求Key支持比较相等,如果不支持或者想按自己的需求走可以自行实现支持 将Key比较相等的仿函数传给第三个模板参数底层存储数据的内存是从空间配置器申请的,如果需要可以自己实现内存池,传给 第四个参数。5.⼀般情况下,我们都不需要传后三个模板参数。
2025-05-26 20:44:10
1012
5
原创 高阶数据结构——哈希表的实现
/根据当前容量 n,返回一个预定义的素数表中大于等于 n 的最小素数,用于哈希表扩容。// >=//对于可以直接转换为整形的,直接转换即可// 对于string类型(不可以直接转换为整形的)需要进行特化template<>hash += ch;enum StateEXIST,EMPTY,DELETE//开放寻址法需要一个连续存储的数组,每个位置不仅要存储数据,
2025-05-26 12:49:27
1927
7
原创 C++——STL——封装红黑树实现mymap与myset
【1】如果当前结点是父亲的左,根据中序左子树->根结点->右子树,那么下一个访问的结点就是当前结 点的父亲;如下图:it指向25,25右为空,25是30的左,所以下一个访问的结点就是30。这个符合左根右的规则吧,那么到了30呢?下一步应该怎么去做呢?【2】迭代器++时,如果it指向的结点的右子树不为空,代表当前结点已经访问完了,要访问下一个结点 是右子树的中序第⼀个,一棵树中序第⼀个是最左结点,所以直接找右子树的最左结点即可。
2025-05-23 16:10:34
1228
4
原创 高阶数据结构——红黑树实现
这里,c就一定是新增的节点了。分析:因为p和u都是红色,g是黑色,把p和u变黑,左边子树路径各增加⼀个黑色结点,g再变红,相 当于保持g所在子树的黑色结点的数量不变,同时解决了c和p连续红色结点的问题,,u不存在,则c⼀定是新增结点,u存在且为黑,则 c⼀定不是新增,c之前是黑色的,是在c的子树中插入,符合情况1,变色将c从黑色变成红色,更新上 来的。,u不存在,则c⼀定是新增结点,u存在且为黑,则 c⼀定不是新增,c之前是黑色的,是在c的子树中插入,符合情况1,变色将c从黑色变成红色,更新上 来的。
2025-05-21 20:02:41
2217
16
原创 高阶数据结构——AVL树的实现(详细解答)
root = kk;else//循环找要插入的cur节点的位置while(cur)else//最后别忘了更新cur的父节点//这儿只是插入,一个一个的找应该插入的位置,虽然这里parent为倒第二个高度位置//cur为倒第一个高度位置,但是不慌,下面的更新bf,会找出不符合的parent//从而实现更新parent,所以现在不需要担心parent的位置//更新bf//先对插入的节点的位置的分析,从而判断应该加bf,还是减去bf。
2025-05-20 20:29:14
1895
6
原创 C++模板
class 类模板名//类内成员定义我之前的有关STL的文章中的模拟实现都是以模板来展开实现的,大家若还是不明白类模板的定义格式,以及怎么写的,可以参考我之前写的文章。一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有 目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。就是咱们写文件或者项目的时候,定义的.c,.h,.cpp文件这些东西。
2025-05-14 20:14:02
1736
20
原创 C++STL——map和set的使用
set的声明如下,T就是set底层关键字的类型• set默认要求T支持小于比较,如果不支持或者想按自己的需求走可以自行实现仿函数传给第二个模 版参数• set底层存储数据的内存是从空间配置器申请的,如果需要可以自己实现内存池,传给第三个参 数。• ⼀般情况下,我们都不需要传后两个模版参数。• set底层是用红黑树实现,增删查效率是 的。前⾯部分我们已经学习了vector/list等容器的使用,STL容器接口设计,高度相似,在这里我只挑选几个比较重要的接口来将。
2025-05-13 20:42:19
1416
20
原创 高阶数据结构——二叉搜索树(最细讲解,你不理解的东西,这里面都有讲解)
咱们不一股脑的全将代码抛出来,这样不利于理解,咱们分开解剖代码,一点一点的理解。K _key;{}public:private://缺省值传参先定义一个BSTreeNode节点,该节点一定要定义为struct,因为该节点得被后面的树频繁访问,定义为struct省事。之后,定义左节点,右节点,别忘了用初始化列表初始化。第二个BSTree才是真正的主体框架,private创建根节点成员变量并给缺省值。
2025-05-10 12:43:18
995
16
原创 数据结构——排序(万字解说)初阶数据结构完
⾸先从右向左找出比基准小的数据,找到后立即放⼊左边坑中,当前位置变为新 的"坑",然后从左向右找出比基准大的数据,找到后⽴即放入右边坑中,当前位置变为新的"坑",结 束循环后将最开始存储的分界值放入当前的"坑"中,返回当前"坑"下标(即分界值下标)。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的 相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,⽽在排序后的序列中,r[i]仍在r[j]之 前,则称这种排序算法是稳定的;
2025-05-07 22:44:24
1627
24
原创 数据结构——二叉树和堆(万字,最详细)
如上图就是树。注意:树 形结构中,子树之间不能有交集,否则就不是树形结构。看完了树,咱们再来看看非树,非树形结构:1. 子树是不相交的(如果存在相交就是上图)。2.除了根结点外,每个结点有且仅有⼀个父结点。3.⼀棵N个结点的树有N-1条边。
2025-04-27 20:37:19
1734
14
原创 C++多态
定义:是⼀个继承关系的下的类对象,去调用同⼀函数,产生了不同的行为。条件:1.必须是基类的指针或者引用调用的虚函数。2.被调用的函数必须是虚函数,并且完成了虚函数重写/覆盖。还有几点要注意一下:要实现多态效果,第⼀,必须是基类的指针或引用,因为只有基类的指针或引用才能既指向基类 对象又指向派生类对象;第二,派生类必须对基类的虚函数完成重写/覆盖,重写或者覆盖了,基类和派 生类之间才能有不同的函数,多态的不同形态效果才能达到。
2025-04-24 19:37:46
1119
15
原创 C++继承(最详细)
什么叫继承呢?继承算是属于对代码的复用。即在保持原有的特性上面,增加一些新的方法以及变量,就叫做继承。那么原有的类叫做基类(父类),增加新的方法以及变量之后的类叫做派生类(子类)。继承 呈现了⾯向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的函数层次的 复用,继承是类设计层次的复用。来看这一段代码,那么观察可以发现,Student与Teacher这两个类都是属于派生类(因为它们都继承了基类Person的特性),而Person类属于基类。
2025-04-22 22:38:03
1417
18
原创 C++——STL——容器deque(简单介绍),适配器——stack,queue,priority_queue
咱们今天讲适配器以及deque,主要讲适配器,那么讲deque是因为,stack,queue的底层都是封装的容器deque。Container就是适配器,可以看出,官方库中都是以deque为底层容器,那么为什么呢?今天咱们就来讨论一下。deque与queue看着是不是很像,但千万别把他们给搞混了,deque是容器,而queue是容器适配器。
2025-04-21 22:09:09
1194
22
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅