自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 漫话算法:滑动窗口(带你刷题版)

这里也可以做一个优化,因为当p是一个字符串数组而不是单词时每次遍历必定会超时,所以采用以下方法进行优化,思路为只处理框框里的元素,统计有效元素,即p中出现次数大于s对应字母出现位置时,为有效位置,当窗口过大时,缩窗口,当窗口正好且有效元素符合时,判断成功。参考了前几题的算法,这个题的思路也不难出,但需注意几点,首先注意left的更新,当符合条件应该逐步入栈,并且要对出窗口的操作进行判断,并且,hash以后用map吧,要不然容易出问题,最后一点,恶心用例直接if else好吧。

2024-05-05 16:28:12 671 3

原创 用哈希封装unordered_map和unordered_set

我们称set的begin为A,哈希的begin为B,A的实现是对B的调用,在A的参数是普通迭代器时,B也是普通迭代器,B的返回值也是普通迭代器,但A的返回值是const迭代器,所以这里需要用普通迭代器创建一个const迭代器的临时变量,这就用到之前写的拷贝构造函数了。2.unordered_map不允许修改key,故普通迭代器和const的pair中的K都要加上const修饰,但是允许修改存储的data,所以普通和const迭代器一一对应。返回类型是迭代器,运用一个仿函数来寻找。后置++就是调用前置++

2024-08-12 10:54:29 135

原创 哈希表详解

5.哈希冲突的问题:1.当两个不同的键值被映射到同一个槽位时,其中一个键值的数据可能会被覆盖2.在发生冲突的槽位中,需要通过额外的操作来查找目标键值,这会增加查找的时间复杂度3.频繁的哈希冲突会导致哈希表的装载因子增加,使得哈希表的性能下降。2.直接地址法:key=key*A+B:优点:简单均匀,缺点:需要知道数据的分布状况,不然容易越界,一般在查找小且连续的情况下。2.哈希函数是数据映射的规则,有以下特征:1.其对应的散列表必须存储全部数据,数据的范围必须在散列表的范围中2.分布应该是均匀分布3.简单。

2024-08-10 21:39:04 423

原创 红黑树封装

迭代器分为两种,普通和const类型,所以它们的返回参数不能一样,为了它们俩可以调用同一个函数,将类模板的参数设置为3个,其中Ref代表const T&,Ptr代表const T*一个是不可修改即二叉搜索树的性质,一个是返回值不可修改即二叉树查找的性质。begin()返回的迭代器类型是const类型,但是红黑树里面的begin返回的是普通类型,所以要拷贝构造,进行类型转换。set的key不允许修改,所以set的迭代器和const迭代器的底层都是红黑树的const迭代器。2.模板参数第一个为K代表参数类型。

2024-08-09 20:48:39 238

原创 一文带你搞懂红黑树的基本操作

1.每个节点只有红色和黑色两种形态2.根节点是黑色的3.如果一个节点是红色的,那么它的两个孩子是黑色的,也就是一条路径不存在连续的红色节点4.对于每个节点,从该节点到其后代的简单路径上均包含数目相同的黑色节点5.每个空节点都是黑色的6.最长路径的节点不超过最短的两倍(最短为纯黑节点)

2024-08-02 21:36:12 293

原创 力扣树层去重:子集2

当我们发现相同的数字出现时不用再进一次循环时,会用到以下格式。

2024-07-15 19:48:19 269 3

原创 力扣字符串回溯:复原ip地址

【代码】力扣字符串回溯:复原ip地址。

2024-07-15 18:40:08 199 3

原创 力扣回溯:分割回文串

里面要用到字符串转换函数substr。

2024-07-15 08:46:02 160 3

原创 力扣40:组合总和2

这道题的关键在于每个数字只能出现一次,说明排序后如果有重复项则跳过,也可以在排序后直接对数组进行去重。

2024-07-14 08:41:56 277 3

原创 力扣回溯:组合总和3

这道题注意回溯的步骤:递归出口,单次操作,恢复现场。

2024-07-14 08:06:18 171 3

原创 avl树的二分构建:将有序数组转化为二叉搜索树

2.avl的构建一般采用二分的方法,类似于快排递归格式。

2024-07-14 07:38:03 232 3

原创 力扣递归思路题:修剪二叉搜索树

这个题非常考验递归思路和二叉搜索树的性质。

2024-07-13 21:50:13 178 3

原创 力扣常规题:删除二叉搜索树中的节点

【代码】力扣常规题:删除二叉搜索树中的节点。

2024-07-13 19:32:26 246 3

原创 力扣简单题:二叉搜索树的插入操作

【代码】力扣简单题:二叉搜索树的插入操作。

2024-07-13 19:06:28 211 3

原创 力扣相似题:二叉搜索树的最近公共祖先

2.与二叉树的最近公共祖先极其类似,就是将左支右支的判断条件改成了二叉搜索树的性质。

2024-07-13 18:49:17 260 3

原创 力扣容器题:二叉搜索树中的众数

容器操作和sort函数的格式。

2024-07-13 17:39:46 210 3

原创 二叉搜索树性质的应用:二叉树的最小绝对差

2.注意模板:二叉树绝对值差值最小的只可能是本节点和上一个节点,可以通过列举得出。

2024-07-13 10:24:15 225 3

原创 力扣深搜:路径总和2

【代码】力扣深搜:路径总和2。

2024-07-13 09:49:03 166 3

原创 力扣高难:接雨水

这下就要使用程序优化的方法了,用变量记录每一次改变的值,采用动态规划的方法优化程序。2.思路很简单,左边最大柱子和右边最大柱子的最小值减当前高度就行了。

2024-07-12 10:52:57 146 4

原创 一道题带你熟练优先队列:前k个高频元素

2.题目中前k个,就很明显的提示了我们这是堆的topk问题,所以要使用优先队列,而这种统计频率的题肯定要使用哈希表去重,所以用了unordered_map,由于优先队列默认是大堆,而我们要建大堆,但是元素不是简单的数据,而是pair的second进行比较,所以还是要采取(数据类型,存储容器,自定义比较类/比较函数)的格式。

2024-07-12 09:20:52 179 4

原创 力扣优先队列的应用:滑动窗口最大值

2.经验总结:看到类似单调性的题使用优先队列是不错的选择,这道题的解题有三个步骤:1,将滑动窗口的最后一个元素删除,但是注意,因为只有队头的元素对结果有影响,所以删除也只删除队头元素2.在入队列前删去所有比该元素小的值,因为已经有生命周期更长,更大的值出现,之前的所有小值已经没有存在的必要,所以删除即可(每个小值存在的窗口,即将进入队列的大值也必然存在)3.入队列和更新结果。

2024-07-12 07:24:45 188 3

原创 灵活运用数据结构来解决问题:反转字符串中的单词

2.常规解法:双指针,但是过于复杂我就不赘述了。3.自创方法:把单词写在链表里,反转链表即可。

2024-07-11 18:57:08 184 2

原创 哈希表容器的应用:求多数之和

2.先来看一看三种容器的特点:set的key有序,key不可重复,key不可修改,运行慢,map的key有序,key可重复,运行慢,unordered_map的key无序,不可重复,不可修改,运行快。我的思路是:先遍历前两个,把对应值和值的数量存在哈希表里,然后从后两个找与其相反的值。3.题目简单,以下为代码。

2024-07-11 16:05:04 225 2

原创 力扣难题:螺旋矩阵2

3.解题思路:总圈数等于n/2,每次圈长-1,圈每次是上下左右四条边,起始点分别为00,11,22.......,如果是奇数则最后在中间把n补上。2.做题第一步:模拟画图,这道题如果没有规律就会非常难做。3.从外到内的每一个圈的结构都是一样的。2.奇数去掉中间点恰好比偶数少一个圈。1.奇数和偶数的圈的结构明显不一样。4.每次圈的长度都减一。

2024-07-11 09:55:45 282 2

原创 悦读:时空复杂度与程序优化

1.时间复杂度越低,程序越好:很经典的一个错误结论,首先,程序的设计除了算法性能,还需要综合考虑数据本身的特点,就时间复杂度来说,当数据量足够小的时候,冒泡,插入,选择排序的实际耗时是要优于快排归并的,就程序本身的特点来说,我们都知道快速排序的时间复杂度虽然和归并排序和堆排序是一个数量级的,但是速度其实更快,但能说明快速排序就一定好吗?归并排序的稳定性和堆排序的省空间也是程序设计的重要考察部分。因此时间复杂度与程序的好坏有关,但不是决定性因素。

2024-07-11 07:31:36 310 2

原创 数据结构考前背代码:模拟卷,哈夫曼

【代码】数据结构考前背代码:模拟卷,哈夫曼。

2024-06-24 20:44:15 136 3

原创 漫话linux:操作系统初步

4.所有设备只能和内存打交道,都是独立的个体,都要用线连接起来,总线分为系统总线(内存交互)和IO总线(与外设沟通)2.操作系统包括两个部分:内核(内存管理,进程管理,文件管理,驱动管理),其他程序(函数库shell程序等)2.系统调用功能比较基础,对用户要求比较高,所以开发者对系统调用进行适当封装,形成了库,便于开发和二次开发。4.定位:在整个计算机系统的软硬件架构中,操作系统的定位赛一款纯正的搞管理的软件。1.软件是由操作系统完成的,操作系统是一款进行管理的软件,负责管理硬件和软件。

2024-06-22 19:04:17 246 4

原创 漫话linux:gdb调试指令

gdn是linux下的一个开源的命令行调试器,它可以帮助程序员在调试程序时跟踪程序运行过程中的错误。它可以用于C、C++、Fortran、汇编语言等多种编程语言。通过GDB,你可以在程序运行时中断程序的执行,查看和修改变量的值,设置断点,单步执行代码,打印函数调用栈等操作。基于gdb强大的调试能力,我们可以快速定位程序运行过程中的错误,用gdb因为gcc是release编译,无法使用debug编译。

2024-06-20 22:28:14 338 3

原创 数据结构期末背代码5:快速排序,堆排序

【代码】数据结构期末背代码5:快速排序,堆排序。

2024-06-20 18:38:49 155 1

原创 漫话linux:关于git的小操作

隐藏文件.gitignore,里面存放的是文件后缀,如果文件有这些文件后缀是不会提交仓库的,为什么用户是可以随意改变里面的内容,而不是和.git一样一般不要动,因为linux的文件后缀可以自己定义,甚至text.father都行(文件vim写入*后缀)获取工作目录和缓冲区的工作状态,这个命令会告诉你哪些文件已经被修改、哪些文件已经被添加到暂存区、哪些文件是新添加的,以及哪些文件是未跟踪的。注意,你以上所有的操作都是在缓冲区里进行的,要真正的创建仓库必须使用git push。查找过程中按q退出进程。

2024-06-19 20:45:41 166 3

原创 漫话linux:进度条项目补充组件:旋转光标

这是一种覆盖的写法首先将下一个需要打印的位置放上#,并将下下个需要打印的位置放上>,这样就会在字符串的结尾保留一个>,当达到临界条件100时则防止将102位置的\0覆写掉,加一个判断语句。为了显示这个进度条一直在工作,可以添加一个旋转光标,就是在一个特定位置实现- \ - \ 的转化,以提示客户程序运行。通过函数指针回调展示进度(把processbar函数传进去)(通过回调显示进度)rate表示进度,其中表示方式为cur/total算出比例再*100的数组长度。

2024-06-18 17:47:32 170 3

原创 数据结构考前背代码4:二叉树的七种遍历和三种构建

【代码】数据结构考前背代码4:二叉树的七种遍历和三种构建。

2024-06-18 16:00:07 147 3

原创 数据结构考前背代码2:哈夫曼,希尔排序,拓扑排序

【代码】数据结构考前背代码2:哈夫曼,希尔排序,拓扑排序。

2024-06-17 08:50:50 176 3

原创 漫话linux:进度条项目

proCess.h(头文件以及函数声明和宏定义)proCess.c(函数主体)

2024-06-16 16:10:08 141 3

原创 漫话linux:倒计时项目

最后是main文件,解析一下,首先c语言输出到屏幕上的命令在c语言命令读取未到return 0的时候会被暂时存放在缓冲区,所以正常输出会先停顿几秒再输出全部的数字,而我们需要倒计时类似的输出,所以要在每次sleep后直接输出数字,也就是刷新缓冲区,就要使用fflush(文件流)的命令,而我们又希望数字都在一个位置而不使用\n,所以要使用\r打印,然后就是防止count>10的打印方式-(左对齐)和2(限制长度,如果count>100则换为3)2.缓冲区:c语言维护的一段内存。

2024-06-15 21:31:26 162 3

原创 数据结构考前背代码1:最小生成树,插入排序,循环队列约瑟夫

3.循环队列实现约瑟夫环。

2024-06-15 10:16:34 166 2

原创 华农专业课拯救计划:模拟卷

现输入一组数据,以0作为输入的结束,从插入排序、希尔排序、快速排序、堆排序四种排序方法中挑选一种稳定的排序算法,对输入的数据进行从大到小的排序,给出排序后的结果。可以用连通网来表示n个城市以及n个城市之间可能设置的通信线路,其中网的顶点表示城市,边表示两个城市之间的线路,赋于边的权值表示相应的代价。注意点:稳定的算法:冒泡,插入,归并,不稳定:快排,希尔,堆,时间复杂度为nlongn的为堆,归并,快排,除了希尔剩余为n方,且希尔介于二者之间,而赶时间选快排,省空间选堆排,稳定性归排,

2024-06-15 08:24:21 746 2

原创 漫话linux:makefile与make的配套操作代码

体现了依赖关系和依赖方法的层次性,make后面可以接指定的依赖关系和依赖对象来调用指定内容呢如make clean,以后编译多个文件需要make后面跟所有的文件名。一般而言,源文件的执行时间比可执行文件要早,而是否需要重新编译,一般在执行文件(.exe)的修该时间老于源文件(.c)表示源文件被动过,需要重新编译。以上为使用make代替gcc命令编译的操作,其中配套文件如下。清理项目(开头注意是四个空格)命令行:make clean。

2024-06-11 21:28:53 211 2

原创 漫话linux:项目自动化构建工具make/makefile

make是一个在Linux下广泛使用的自动化构建工具,它可以根据一个Makefile文件中的指令来自动执行编译、链接等操作,从而生成一个可执行文件或者库文件。通常情况下,使用make工具可以极大地简化代码的编译和构建过程。

2024-06-11 11:23:06 484 1

原创 漫话linux:gcc的使用

GCC是GNU Compiler Collection的缩写,是一款自由软件、跨平台的编译器。它支持多种语言,包括C、C++、Objective-C、Fortran、Ada等,可运行在多种操作系统上,如Linux、Windows、macOS等。GCC可以将源代码编译成目标代码,并链接成可执行文件。除此之外,GCC还提供了许多优化选项,可以对生成的代码进行优化,使程序的性能得到提升。

2024-06-10 10:05:57 850 1

空空如也

空空如也

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

TA关注的人

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