自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 class 100 KMP算法原理和代码详解

暴力方法就是将两个字符串进行一个一个比较这个知道就行了, 我们的重点是KMP算法O(n * m), 使用KMPO(n + m)暴力方法时间慢的原因是:每一个匹配的过程都是相互独立的, 所以每次都要重新比对一遍.KMP算法就是利用前面的匹配过程来加速后面的匹配过程next数组:不包含当前下标在内, 其前面的字符串的前缀与后缀的最大匹配长度.(不能含有整体).我们这里只是讲解next数组的定义, 后面会讲解如何快速得到next数组求解next数组。

2024-11-03 18:56:02 793

原创 class 041 最大公约数、同余原理

对下面的证明过程有什么问题和怀疑的直接随便找两个数字自己写一遍就行了.

2024-11-01 17:27:43 1037

原创 class 037 二叉树高频题目 - 下 (不含有树形dp)

因为这个题目的解法比较巧妙, 我们结合代码解释这个方法利用了递归的方式, 其中的l和r就是从当前节点开始, 分别去左边和右边同时搜索p和q。

2024-10-30 10:21:14 644

原创 class 36 二叉树高频题目 - 上 (不含有树形dp)

BFSBFS。

2024-10-26 23:05:23 968

原创 class 034 链表高频题目和必备技巧

O(1), 的方法其实并不简单, 所以在我们训练的时候, 尽量不使用容器做, 这样能很好地锻炼我们的 coding 能力, 想要做到随意所欲的修改代码, 实现要求, 只有自己一步一步的来调整, 训练, 这个哪一个老师都教不了.

2024-10-13 22:37:39 1130

原创 class 033 位运算实现加减乘除

这篇文章是看了“左程云”老师在b站上的讲解之后写的, 自己感觉已经能理解了, 所以就将整个过程写下来了。这个是“左程云”老师个人空间的b站的链接, 数据结构与算法讲的很好很好, 希望大家可以多多支持左程云老师, 真心推荐.

2024-10-09 20:58:06 767

原创 class 032 位图

这篇文章是看了“左程云”老师在b站上的讲解之后写的, 自己感觉已经能理解了, 所以就将整个过程写下来了。这个是“左程云”老师个人空间的b站的链接, 数据结构与算法讲的很好很好, 希望大家可以多多支持左程云老师, 真心推荐.

2024-10-07 19:56:28 692

原创 class 031 位运算的骚操作

只有在二进制下, 任何位上只有一个1, 才能是 2 的幂, 比如0000 00010001 0000, 都是 2 的幂.两个数必须是2的幂:即它们的形式必须是 (2^n) 和 (2^m),其中 (n) 和 (m) 是非负整数。两个数的指数必须相同:即 (n = m)。但是二进制下, 一个“二进制”位置上只能有一个是1, 所以所有“二进制位”上只有一个1, 才能是 2 的幂,

2024-10-06 22:36:15 788

原创 class 004 选择 冒泡 插入排序

我感觉这个真是没有什么好讲的, 这个是比较简单的, 感觉没有什么必要写一篇博客, 而且这个这么简单的排序问题肯定有人已经有写好的帖子了, 肯定写的比我好, 所以我推荐大家直接去看“左程云”老师的讲解就很好了, 一定是能看懂的, 要是用文字形式再写一遍, 反而有点画蛇添足了. 这里就将三个排序的代码写上.这三个排序算法中唯一需要注意的是:插入排序, 这个在小数据量的时候排序的速度是非常快的, 一般认为数组长度在10 ~ 50之间, 插入排序的效率是非常快的. 后续学习的Tim都有插入排序的参与.Tim。

2024-10-05 22:19:52 690 1

原创 class 030 异或运算的骚操作

这篇文章是看了“左程云”老师在b站上的讲解之后写的, 自己感觉已经能理解了, 所以就将整个过程写下来了。这个是“左程云”老师个人空间的b站的链接, 数据结构与算法讲的很好很好, 希望大家可以多多支持左程云老师, 真心推荐.

2024-10-02 00:05:31 979

原创 class 029 重要排序算法的总结

冒泡排序, 选择排序, 插入排序中, 最差的是选择排序, 因为付出了O(n^2)的时间复杂度, 也没有稳定性.归并排序, 随机快速排序, 堆排序中, 最需要注意的是随机快速排序, 因为随机快速排序的时间复杂度是根据期望确定的, 不能用最差和最好的情况进行确定, 这一点在以前随机快排的帖子中有详细的说明.

2024-09-30 00:05:01 644

原创 class 028 基数排序

这篇文章是看了“左程云”老师在b站上的讲解之后写的, 自己感觉已经能理解了, 所以就将整个过程写下来了。这个是“左程云”老师个人空间的b站的链接, 数据结构与算法讲的很好很好, 希望大家可以多多支持左程云老师, 真心推荐.

2024-09-29 23:36:50 849

原创 class 027 堆结构常见题目

K这篇文章是看了“左程云”老师在b站上的讲解之后写的, 自己感觉已经能理解了, 所以就将整个过程写下来了。这个是“左程云”老师个人空间的b站的链接, 数据结构与算法讲的很好很好, 希望大家可以多多支持左程云老师, 真心推荐.

2024-09-29 00:58:25 1023

原创 class 026 哈希表、有序表和比较器的用法

这篇文章是看了“左程云”老师在b站上的讲解之后写的, 自己感觉已经能理解了, 所以就将整个过程写下来了。这个是“左程云”老师个人空间的b站的链接, 数据结构与算法讲的很好很好, 希望大家可以多多支持左程云老师, 真心推荐.

2024-09-27 20:38:42 580

原创 class 025 堆排序

这篇文章是看了“左程云”老师在b站上的讲解之后写的, 自己感觉已经能理解了, 所以就将整个过程写下来了。这个是“左程云”老师个人空间的b站的链接, 数据结构与算法讲的很好很好, 希望大家可以多多支持左程云老师, 真心推荐.

2024-09-26 13:44:27 955

原创 class 024 随机选择算法

所以分析时间复杂度的方式还是根据期望O(n). 只需要记住就行了, 不用去证明.

2024-09-24 23:22:48 985

原创 如何学习数据结构与算法 实操经验,不是空话,可以完全运用到自己的代码实例中

若是自己在刚刚开始学习的时候, 有实在是理解不了的数据结构和算法, 比如:听老师讲课能懂, 但是自己实现不了, 先不要着急, 可以尝试背老师的代码, 老师的代码一般都是经过高度迭代之后的. 是很好的实现, 自己理解每一步, 每一行代码的实现之后, 自己写一遍, 并且要在写一行之后充分理解为什么这么写(意义是什么?的大章节, 比如:选择排序, 冒泡排序, 插入排序, 归并排序, 随机快速排序, 堆排序, 基数排序都学习完了之后, 再来进行整体性的复习, 这样的效果是比较好的.存放的是另一个节点的。

2024-09-24 12:11:36 902

原创 class 023 随机快速排序

这篇文章是看了“左程云”老师在b站上的讲解之后写的, 自己感觉已经能理解了, 所以就将整个过程写下来了。这个是“左程云”老师个人空间的b站的链接, 数据结构与算法讲的很好很好, 希望大家可以多多支持左程云老师, 真心推荐.

2024-09-23 23:47:24 1371

原创 class 022 归并分治

只要是符合上面两个特征的问题一般是可以用归并分治进行解决的.学习数据结构与算法一定会接触到非常多的思想方面的内容, 或许将来我们会遇到凭空 (架空) 的感觉, 不要去太纠结如何想到这个解法, 这个思想的. 只有先具备了很多的数据结构, 算法, 思想基础之后, 去问如何用学习过的东西进行推导, 最后进行求解.

2024-09-22 23:31:58 965

原创 class 021 归并排序

O(n^2)快很多很多的,10^6, 所以O(n^2) 就是 10^12时间才能排好序, 而只需要就行了, 肯定是要比O(n^2)快很多很多的.原理解释:比较行为没有被浪费. 比如冒泡排序中, 全部都比较一次, 然后只是搞定了一个数字, 然后继续重新开始, 再解决一个数字, 这样存在大量的比较行为, 而且有很多都浪费了.但是在归并排序中, 每一组比较之后都进行了重新排序, 没有浪费比较行为.

2024-09-20 20:43:10 1040

原创 class 020 递归和master公式

利用求一个数组中的最大值来理解递归:求, 求这个数组中的最大值.

2024-09-19 23:04:37 1169

原创 class 019 算法笔试中处理输入和输出

这篇文章是看了“左程云”老师在b站上的讲解之后写的, 自己感觉已经能理解了, 所以就将整个过程写下来了。这个是“左程云”老师个人空间的b站的链接, 数据结构与算法讲的很好很好, 希望大家可以多多支持左程云老师, 真心推荐.其中所有的代码都在老师的github里, 自己去下载吧.

2024-09-19 20:07:50 676

原创 class 018 二叉树遍历的非递归实现和复杂度分析

这篇文章是看了“左程云”老师在b站上的讲解之后写的, 自己感觉已经能理解这个题目了, 所以就将整个过程写下来了。这个是“左程云”老师个人空间的b站的链接, 数据结构与算法讲的很好很好, 希望大家可以多多支持左程云老师, 真心推荐.所有的测试链接都在帖子最下方的代码中, 自己看就可以, 这个代码也是可以直接运行的.

2024-09-19 18:31:12 1213

原创 18.加餐-指针及其应用(基于ARM Cortex-M)

指针是用来存储一个变量地址的变量, 若是一个“变量”占用了多个地址, 那指针就指向对应的“变量”所占用的最低的“地址”:“引用(地址)操作符(运算符)”.:“解引用操作符”.

2024-09-17 10:00:09 449

原创 17. 函数指针的使用案例(回调函数)

这样可以进行任意的修改, 毕竟。

2024-09-17 09:58:58 406

原创 16. 函数指针

函数指针的书写方式和调用函数的方式都有两种.书写方式. (使用的比较多)调用函数方式. (使用的比较多)

2024-09-17 09:57:48 530

原创 15. 函数返回指针

函数返回指针的主要目的是为了提高效率、避免复制大对象、实现资源共享或多态性等。在使用指针时,务必注意内存管理和资源释放,以避免内存泄漏或其他问题.注意:指针说白了也只不过是一种数据类型, 所以函数返回一个指针当然也是没有任何问题的.那个空间中存储的已经不是原来的值了, 所以有可能打印出错.这样输出的代码其实是不对的, 因为先执行的。执行完之后会自动进行销毁, 那么有可能。上的内存空间已经被释放掉了, 随后被。

2024-09-17 09:56:40 374

原创 14. 指针与动态内存 - 内存泄露

内存泄露是指不当地使用内存或者内存的堆区, 在一段时间内持续增长.内存泄露总是因为堆中未使用和未引用的内存块才发生的.内存上的栈是自动回收的. 而且栈的内存大小是固定的, 最多就是发生栈溢出。

2024-09-16 19:57:09 300

原创 13. 指针与动态内存 - malloc calloc realloc free

malloc。

2024-09-16 19:56:13 367

原创 12. 指针与动态内存 - 栈 vs 堆

因为有时候我们需要一个很大的数组, 这个数组会占用很大的内存, 但是栈没有这么大的内存, 或者是我们需要预留一部分空间, 在运行的时候进行调用, 但是栈已经是在编译期间所有的内存都已经确定了, 所以我们需要用“堆”来满足我们的需求.预留的时候是有界限的. 而且函数所占用的内存已经在编译期间确定了, 要是调用的函数较多, 有可能造成。“堆”是数据结构的一种, 但是和这个计算机内存中的“堆”没有什么关系, 注意一下就行.堆是一个“空闲的区域”, 也就说使用“堆”, 就代表着“使用过的内存, 都要通过。

2024-09-16 19:55:02 453

原创 11. 指针与多维数组

无论几维数组都是按照二维数组的方式进行研究就可以了.其实没有什么太需要说的, 基本上就是一个照猫画虎.在多维数组作为参数进行传参的时候, 需要在。中也应该是接受一个返回指向。比如, 在下面代码中,

2024-09-16 19:53:23 247

原创 10. 指针与二维数组

这五行代码输出的结果是一样的,因为它们都表示b[0][0]的地址。b*bb[0]和&b[0][0]都表示b[0][0]的地址。&b[0]也表示b[0]这个一维数组的起始地址,而b[0]的起始地址就是b[0][0]的地址。这五行代码输出的结果是一样的,因为它们都表示b的下一个一维数组的起始地址或首元素地址。(b + 1)和&b[1]表示b的下一个一维数组的起始地址。*(b + 1)b[1]和&b[1][0]表示b的下一个一维数组的首元素地址。

2024-09-16 19:52:12 847

原创 9. 指针与字符数组(下)

【代码】9. 指针与字符数组(下)

2024-09-16 19:51:06 165

原创 8. 指针与字符数组(上)

这个都是一样的, 对于指针的修改都是对于原来的地址, 不是将整个复制过去, 下面的这个例子主要是为了加深印象.要求我们很清楚的知道什么时候我们使用的是指针, 什么时候使用的是数组.的大小, 不然就会出现乱码的情况, 因为最后一定是要有一个。尽管指针和数组有时候使用起来相似, 但是它们不是同一个类型.对于字符串, 我们需要分配的数组大小至少要是。的, 当然, 一般来说都是会自动进行添加的.基本上和原来的是一样的, 最需要注意的就是。这四个字符, 就至少要。不能进行相加减, 但是。可以执行这样的操作.

2024-09-16 19:50:20 327

原创 7. 数组作为函数参数

因为一个数组有可能是很大的, 若是都进行全部的复制, 这样有点太浪费空间了.从代码中也能看出来, 指针的移动还是从。传进函数中, 数组就无法执行.中, 有一个数组, 但是在。开始的, 接下来指向。

2024-09-16 19:48:37 262

原创 6. 指针和数组

这两种存储方式是不同的, 数组是连续的空间, 可以通过指针的跳转直接知道数组中下一个地址中存储的值,的地址是一样的, 所以数组的首元素地址又被称为数组的“从这段代码中可以发现数组中表示第“i”位置的地址或者值。但是基本数据类型不可以, 不知道相邻的值是什么.对数组的内存地址进行存储, 但是不能直接将。

2024-09-16 19:46:53 273

原创 5. 函数传值和传引用

可以节省很多的空间, 虽然指针也是占用空间的, 但是不需要直接复制过去, 可以节省很多空间.这也就说明:p 和 a 一定是相互独立的, 不是同一个变量.举例子:下面这张图就很好表示了“按引用(地址)传递”的。的地址进行拷贝过去, 然后将,之间是相互独立的, 所以在。下面的函数中, 先执行。之后继续重复上述行为.Incrment函数。a = 10传递进去。

2024-09-16 19:45:32 304

原创 4. 指向指针的指针

的意义(作用, 操作)是找到一个指针中存储的地址, 然后“打印”地址中存储的东西.创建一个指向“指向整型变量的指针”的指针. (指向指针的指针).创建一个指向整型变量的指针.继续创建指向指针的指针的指针。

2024-09-16 19:43:21 230

原创 3. 指针的类型, 算数运算, void指针

下面这段代码只要是一个人类就能看懂, 展示了不同的。因为不同的数据类型的存储方式是不同的, 比如。, 这两个类型的存储方式是不同的, 一个占据。在不同的比特位中, 存放的意义也不同,方式的区别, 是一个很好很好的案例.这个空间, 然后进行提取(提取到。. 而且存放的方式是不同的., 从下面的代码中可以实现.指针是一个“强类型”的,指向int类型的指针。指针类型进行数学运算。

2024-09-16 19:41:53 217

原创 2. 指针代码实例

其实从这里也能看出来, 这里的指针变量中, 存储的还是一个“抽象的地址(地址的抽象)”,, 而不是“加上一个对应的数据类型的值”.进行相加减都是按照自己的方式进行的,下面这段代码说明了对应的。, 应该是真实的地址。

2024-09-16 19:40:17 196

空空如也

空空如也

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

TA关注的人

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