![](https://img-blog.csdnimg.cn/0800e5bd5d264602abc2262de18a996d.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法
文章平均质量分 64
算法介绍以及例题详解。
Blushyes
这个作者很懒,什么都没留下…
展开
-
二叉树遍历(递归、迭代、左侧链思路迭代)
各种遍历写法。原创 2023-05-28 11:56:29 · 62 阅读 · 0 评论 -
归并排序代码(递归,迭代,多线程)
归并排序的各种版本代码。原创 2023-05-10 23:08:01 · 84 阅读 · 0 评论 -
不撞南墙不回头——浅谈深度优先搜索(DFS)
深度优先搜索算法(英语:Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法。这个算法会尽可能深的搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。一定要找到最深的节点才回头,然后再寻找其他邻居节点,这就是深度优先搜索。实现深度优先算法的实现方式有两种,分别是用原创 2022-01-30 17:44:27 · 536 阅读 · 0 评论 -
看似很难实际都一样——最小路径和(二维动态规划)
原题:最小路径和这里我们就不一一分析递归的可行性了,直接上思路,老规矩,先上递归思路。思路首先仍然是问题转换,原题给的函数和问题转换后的函数分别为:int minPathSum(vector<vector<int>>& grid); //返回grid从左上到右下的最小路径和int minPathSumToXY(vector<vector<int>>& grid, vector<vector<int>>&am原创 2022-01-27 00:35:29 · 632 阅读 · 0 评论 -
看似动态规划,实则不需要——等差数列划分
原题:等差数列划分老规矩,先看看能否用递归解。转换假设现在的数列为[1,2,3,4,5,6],要怎么才能找出其子数列中所有的等差数列而无遗漏呢?很容易想到,我们可以找出其所有子数列中以某数开头或者以某树结尾的等差数列。这里就拿找出所有以某数结尾的等差数列举例。假设要找出[1,2,3,4,5,6]的子数列中所有的等差数列,只需把问题转换为分别找出这个数列的所有子数列中以i(i in [1,2,3,4,5,6])结尾并将其求和即可。是否能分解为子问题考虑一般的情况,以数列nums中的第i(i&g原创 2022-01-24 01:44:08 · 553 阅读 · 0 评论 -
做一个聪明的小偷——打家劫舍(一维动态规划)
不怕小偷有文化,就怕小偷会规划。今天来看一道一维动态规划的例题:打家劫舍首先来尝试一下利用递归法求解我们先来考虑一下是否可以用递归法求解首先我们考虑这几个条件是否满足:1.是否可以分解为子问题2.是否满足最优子结构3.是否存在递归基是否可以分解为子问题假设我们现在偷的房子集为[2,7,9,3,1],我们...原创 2022-01-23 19:10:41 · 347 阅读 · 0 评论 -
用空间换取时间——浅谈动态规划
灵感递归能够解决的问题,说白了就是能否分解为许多个相同类型的规模更小的子问题的问题,其实就是一种分治思想,递归只是其中的一种实现手段而已。而当存在着大量重复子问题的时候,单纯的递归效率确实太低了,所以这种情况下,若仍想使用递归,就必须使用带备忘录的递归。那么,是否存在一种非递归,也就是迭代的实现方法呢?没错,它就是我们今天的主角——动态规划。初识我们先来回顾一下带备忘录的递归——将每次计算的结果储存起来,下次若再次遇到,则只需直接从记忆表中提取即可。这是一种用空间换取时间的方法,显然,这是十分正确有原创 2022-01-22 01:35:42 · 1420 阅读 · 0 评论 -
禁止套娃——浅谈递归思想
灵感相信大家小时候都被这样一个小故事给绕进去过:从前有座山,山上有个庙。庙里有两个和尚,一个老和尚、一个小和尚。老和尚在给小和尚讲故事,老和尚说,从前有座山,山上有个庙。庙里有两个和尚,一个老和尚、一个小和尚。老和尚在给小和尚讲故事,老和尚说……小时候给别人讲这个故事,总能引得大家哄堂大笑。现在再次看到这个故事时,却发现它并没有想象中的那么简单,因为其中隐含着一种重要的编程思想——递归思想。初识那么问题就来了,什么是递归思想呢?我们先来看看递归的维基百科:递归(英语:Recursion)原创 2022-01-21 20:49:47 · 362 阅读 · 0 评论