- 博客(56)
- 收藏
- 关注
原创 class 100 KMP算法原理和代码详解
暴力方法就是将两个字符串进行一个一个比较这个知道就行了, 我们的重点是KMP算法O(n * m), 使用KMPO(n + m)暴力方法时间慢的原因是:每一个匹配的过程都是相互独立的, 所以每次都要重新比对一遍.KMP算法就是利用前面的匹配过程来加速后面的匹配过程next数组:不包含当前下标在内, 其前面的字符串的前缀与后缀的最大匹配长度.(不能含有整体).我们这里只是讲解next数组的定义, 后面会讲解如何快速得到next数组求解next数组。
2024-11-03 18:56:02
793
原创 class 037 二叉树高频题目 - 下 (不含有树形dp)
因为这个题目的解法比较巧妙, 我们结合代码解释这个方法利用了递归的方式, 其中的l和r就是从当前节点开始, 分别去左边和右边同时搜索p和q。
2024-10-30 10:21:14
644
原创 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
原创 如何学习数据结构与算法 实操经验,不是空话,可以完全运用到自己的代码实例中
若是自己在刚刚开始学习的时候, 有实在是理解不了的数据结构和算法, 比如:听老师讲课能懂, 但是自己实现不了, 先不要着急, 可以尝试背老师的代码, 老师的代码一般都是经过高度迭代之后的. 是很好的实现, 自己理解每一步, 每一行代码的实现之后, 自己写一遍, 并且要在写一行之后充分理解为什么这么写(意义是什么?的大章节, 比如:选择排序, 冒泡排序, 插入排序, 归并排序, 随机快速排序, 堆排序, 基数排序都学习完了之后, 再来进行整体性的复习, 这样的效果是比较好的.存放的是另一个节点的。
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 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
原创 15. 函数返回指针
函数返回指针的主要目的是为了提高效率、避免复制大对象、实现资源共享或多态性等。在使用指针时,务必注意内存管理和资源释放,以避免内存泄漏或其他问题.注意:指针说白了也只不过是一种数据类型, 所以函数返回一个指针当然也是没有任何问题的.那个空间中存储的已经不是原来的值了, 所以有可能打印出错.这样输出的代码其实是不对的, 因为先执行的。执行完之后会自动进行销毁, 那么有可能。上的内存空间已经被释放掉了, 随后被。
2024-09-17 09:56:40
374
原创 14. 指针与动态内存 - 内存泄露
内存泄露是指不当地使用内存或者内存的堆区, 在一段时间内持续增长.内存泄露总是因为堆中未使用和未引用的内存块才发生的.内存上的栈是自动回收的. 而且栈的内存大小是固定的, 最多就是发生栈溢出。
2024-09-16 19:57:09
300
原创 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
原创 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关注的人