![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 89
拙野
只追求质量,不追求数量。不糊弄别人就是不糊弄自己!
展开
-
【算法题】搜索二维矩阵,一文彻底弄会!
那么在使用二分查找的话,初始搜索的左边界就为0,右边界就为m*n-1,也就是15。我们在确定中间位置的时候又需要将一维数组的位置转成二维数组的位置,这样我们才能从二维数组中获取到对应位置的值来和目标值进行比较。那么知道这个关系后,我们就可以在不借助额外空间的情况下,完成对该二维数组的查找。也就是需要一个大小为m*n的一维数组来存储转换后的二维数组,其中,m为二维数组的行大小,n为二维数组的列大小。我们首先观察到,矩阵的每一行都是有序的,而且每一行的第一个元素大于前一行的最后一个元素。其实,我们仔细想一下。原创 2024-06-16 13:58:17 · 574 阅读 · 0 评论 -
【算法题】矩阵置零,一文彻底搞懂!
导致这个问题的原因就是第一行和第一列共用了matrix[0][0],当matrix[0][0]=0的时候,我们无法得知它是标记的行还是列,还是两者都进行了标记。就比如上图矩阵,当我们遍历到[0,2]位置的时候,也就是第一行有0的位置的时候。我们用第一行第一列标记的时候,那么此时我们的操作就是matrix[0][0]=matrix[0][2] = 0。通过创建两个数组,分别记录需要置零的行和列,然后再次遍历矩阵进行置零操作,我们可以实现对原矩阵的修改。其中m是矩阵的行数,n是矩阵的列数。请使用 原地 算法。原创 2024-06-15 15:14:33 · 1034 阅读 · 0 评论 -
【算法题】编辑距离(动态规划),一文彻底弄懂!
那么,问题来了,我们该如何初始化第一行和第一列的数据呢? 比如,word1为abc,word2为dcdb。我们初始化第一行的时候,那就是要求出a分别转换成d、dc、dcd、dcdb时的最少操作次数。显然这样初始化是非常麻烦的,甚至是不可完成的!那么我们再假设word1为zabc,word2为zdcdb。此时我们初始化第一行的时候,则就是求z分别转换成z、zd、zdc、zdcd、zdcdb时的最少操作次数。显然这个时候就很简单了对应最少操作次数其实就是j的值。 那么,灵感原创 2024-06-14 23:05:44 · 913 阅读 · 2 评论 -
回溯算法,你“回”了吗
回溯算法,又称为试探法,是一种通过穷举所有可能情况来找到问题的解的方法。回溯算法通常采用深度优先搜索的策略,从一个选择开始,不断地向某一方向前进,直到无法继续。此时,需要回退到上一步选择的其他分支继续尝试,直到找到问题的解或无法继续搜索。回溯算法的思想源于数学中的排列组合问题,通过尝试所有的可能性来找到问题的解。与穷举搜索相比,回溯算法具有剪枝操作,可以通过一些判断条件来减少搜索的路径,提高算法的效率。回溯算法虽然能够解决很多问题,但是,他并不是一个高效的算法。原创 2024-02-29 01:47:41 · 944 阅读 · 6 评论 -
深入理解单调栈算法,这一篇就够了
单调栈是一种特殊的栈,它的特点是栈中的元素始终保持单调有序。通常有两种单调栈,分别是单调递增栈和单调递减栈。单调递增栈顾名思义,栈内元素从栈底到栈顶递增有序,即栈顶元素最小,栈底元素最大。而单调递减栈则相反,栈内元素从栈底到栈顶递减有序,即栈顶元素最大,栈底元素最小。这种利用单调栈求解问题的思路通常可以简化算法,提高算法的效率。在解决问题时,我们需要仔细观察问题的性质,判断是否适用单调栈。如果问题符合单调栈的特点,我们就可以借助单调栈来解决问题,以达到优化算法效率的目的。简单的说,原创 2024-02-27 22:51:21 · 2365 阅读 · 6 评论