![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 71
面试常考算法总结
一头小菜猪
这个作者很懒,什么都没留下…
展开
-
数据结构与算法之动态规划
以打家劫舍例子开始 其实这个题目的意思是:**给你一个数组,拿取不相邻的数组的值,求所有可能拿取的值的最大值。 题目分析:就是自己调用自己,一种暴力枚举的方式。所谓暴力是没有经过任何的优化,枚举了所有的情况的方式。 记忆化递归 开始真正的动态规划之前,先记录下记忆化搜索的这种方式 所谓记忆化搜索,就是对于会重复遍历或者重复计算的部分,直接用数组或者其他集合去存起来,这样下一次如果计算到相同的值得时候,就可以免去计算直接拿出这个想要的值了。 DP 自底向上。将大规模的问题转换为小规模的问题。基本上所有的动态原创 2022-07-09 11:08:46 · 133 阅读 · 1 评论 -
DFS+回溯
回溯就是对一个问题的所有可能结果进行搜索的一种方法,通过深度优先遍历的思想来实现。本质上回溯算法就是一种遍历算法,它会搜索得到一个问题的所有解,时间复杂度很高。 对于所有可能的情况,我们一种一种的去尝试(一般按照顺序来枚举,这样保证每一个情况都能搜索到)如果是我们想要的结果就放到结果集中。另外,在满足某些条件的时候可以进行剪枝。一般都是将这种问题转换成一个树形结构来进行分析。既然是树形结构,就要知道 1.每个节点中是什么:可以根据节点中的值来判断是否要加index,来表示下一次从哪里开始遍历 2.每条路径上原创 2022-07-07 10:09:25 · 181 阅读 · 0 评论 -
数据结构之堆
优先级队列,又叫堆,是一个完全二叉树,其中每个节点的值总是大于(小于)或者等于子结点的值,所以就有大顶堆和小顶堆。一般树的实现都是用节点连接而成,也即是用指针,但是因为堆是一个完全二叉树,所以使用数组来标识更方便,从数组下标0开始,位置为i的节点其父节点位置一定是(i-1)/2,而它两个子结点的位置一定是2i+1,2i+2。在堆中插入元素,一般是**插入到数组的最后一个位置,**然后开始上浮调整,插入元素之前默认堆已经建好了,我们以大顶堆为例子。 删除元素 删除元素一般是删除堆顶的元素,可以直接将堆顶元素删原创 2022-07-06 11:10:37 · 145 阅读 · 0 评论 -
数据结构之链表
链表的详细介绍请参考书本,这里只是根据做题学到的我认为必须要知道的东西做了一次介绍链表:由若干个节点组成的一种在内存空间中非连续非顺序的存储结构。其中结点是由存储数据元素的数据域和存储下一个(上一个)结点地址的指针域组成。因此,链表插入和删除结点都可以达到O(1)的时间复杂度,但是查找一个结点却要遍历整个链表,O(n)的时间复杂度。 结点程序表示: 链表类型 1.单向链表 做题一般都是单向链表,所谓单向就是结点中指针域只包含指向其后继结点的指针,如图: 相较于单向链表,有一个指向前驱结点的指针,如图所示 首原创 2022-07-05 21:37:44 · 187 阅读 · 0 评论