
算法系列
文章平均质量分 94
望未来无悔
这个作者很懒,什么都没留下…
展开
-
系统学习算法:专题十二 记忆化搜索
其实难的不是记忆化搜索,而是如何写出暴搜的代码,也就是dfs,如果暴搜能过就过,过不了就看看能不能用记忆化搜索来优化,不是所有的暴搜都能转记忆化搜索的,要看是否存在相同的计算,如果有,那么就添加一个备忘录,dfs进去的时候就看一看备忘录,有就用,没有就算一次,然后再保存到备忘录,几乎是个模板,难的还是dfs综上所有递归回溯的部分就基本学完了,接下来会继续学其他的算法。原创 2025-02-24 23:34:42 · 645 阅读 · 0 评论 -
系统学习算法:专题十一 floodfill算法
floodfill算法简单来说就是求出相同性质的联通块比如在上面这个矩阵中,如果我们要求出所有负数的联通块,就可以使用floodfill算法,但联通必须是上下左右,斜对角的不行其中实现的方法有深度优先遍历(dfs)以及宽度优先遍历(bfs),这里主要使用的是dfs跟之前走迷宫的方法大致一样,难度不大其实跟之前也没什么太大的区别,主要学到了一个正难则反的思想,其他还是老样子。原创 2025-02-18 23:42:50 · 679 阅读 · 0 评论 -
系统学习算法:专题十 递归,搜索与回溯综合练习
至此所有的综合练习全部写完,应该对dfs有了更深刻的感受,其中重点是恢复现场,剪枝,画决策树,确定结束条件以及走迷宫类型的题,可以用映射关系来记录上下左右,同理也可以记录八个方向还有对角线和九宫格的写法基本也就是暴搜,思路不算太难,主要要有代码实现能力,能将决策树的思路转化为代码接下来还有floodfill和记忆化搜索两个小专题,学完就算大体地学完了递归,搜索和回溯这个大专题了,进行加油!原创 2025-02-16 13:25:26 · 1006 阅读 · 0 评论 -
系统学习算法:专题九 穷举vs暴搜vs深搜vs回溯vs剪枝
解决全排列,集合这种需要枚举许多情况并回溯的,先画出决策树,决策树不唯一,只要思路是对的,通过代码来实现,其中需要注意回溯后要恢复现场,最后就是正确的。原创 2025-02-04 20:04:16 · 1072 阅读 · 0 评论 -
系统学习算法: 专题八 二叉树中的深搜
深搜其实就是深度优先遍历(dfs),与此相对的还有宽度优先遍历(bfs)如果学完数据结构有点忘记,如下图,左边是dfs,右边是bfs而二叉树的前序,中序,后序遍历都可以使用递归来编写,而这三种遍历都属于dfs所以本质还是递归,只是换到了二叉树这个数据结构而已。原创 2025-02-02 21:40:19 · 1046 阅读 · 0 评论 -
系统学习算法: 专题七 递归
既然循环和递归可以相互转化,那么什么时候用循环写着舒服,什么时候用递归写着舒服当像左边这样有很多分支的话,就用递归舒服,像右边这样单边树就用循环比如遍历数组,它不会出现什么回溯,也没有其他多余的选择,就下标一直往后走就行了,就用循环很舒服像汉诺塔那道题,因为有三个柱子,所以往那边移动就有多个选择,选择的地方有很多,分支就多,很复杂,所以递归写着就很舒服。原创 2025-01-31 16:49:51 · 754 阅读 · 0 评论 -
系统学习算法:专题六 模拟
模拟算法其实也不叫算法,这类题就是题目告诉你具体流程是怎么样的,让你用代码来实现,思路上不怎么难,主要考察代码能力,将想转化成做,模拟题目的操作步骤,这就是模拟。原创 2025-01-25 18:45:38 · 681 阅读 · 0 评论 -
系统学习算法:专题五 位运算
1.这六种就是常见的位运算符,无进位相加就是在二进制中,两个数的某一位1和1可以进位,但是异或就不进位,相加后为0,跟相同为0,相异为1一个意思2.第一小类题型,第几位就用右移或左移操作符来控制,是0还是1就&1就能判断了3.第二小类题型,要修改成1,那么就 | 1就行了,修改哪一位就让1左移多少位即可4.第三小类题型,修改为0,那就是& 0即可,但是只是让第x位,所以其他位要为1,那么就只能让1左移x位,然后取反再按位与即可。原创 2025-01-22 19:48:43 · 726 阅读 · 0 评论 -
系统学习算法:专题四 前缀和
然后就来想优化,我们之前做过一道题,也是求和为k的子数组个数,在那一道题我们使用的是滑动窗口,这一道题好像跟那道题一模一样,但其实有一点区别,那就是之前那道题中数组的值全是正数,那么就具有单调性,而这道题的提示中写了数组中的值有正有负,所以就不能保证右边界往右滑动时是递增的,左边界往右滑动时是递减的,不具有单调性,所以这道题不能使用滑动窗口。在数学中,-1%2=1,即取模的值都为正数,而在Java中,-1%2=-1,所以这个是有矛盾的点,因此我们要将Java中取模操作后的值进行负转正,也就是统一返回正数。原创 2025-01-15 23:01:05 · 872 阅读 · 0 评论 -
系统学习算法:专题三 二分查找
因为按照上面分析的过程中,left会跳出第一个区间,来到第二个区间的最左端点,而right不会跳出第二段区间,会来到第二个区间的最左端点,也就是说当left==right时,已经就是最后结果了,所有都判断查找完了,就没必要再进循环去判断,如果进入循环的话,那么就会命中第二种情况,即x>=t,那么此时right=mid就还是没有发生移动变化,这时就死循环了。当然总会觉得有些特殊情况没考虑到,比如0和1会不会不符合这个模板,其实将0和1带入代码,就会发现0根本就不进循环,直接就返回left,而left也是0。原创 2024-12-03 14:06:44 · 691 阅读 · 0 评论 -
系统学习算法: 专题二 滑动窗口
题目的意思也很简单,就是找到s字符串中涵盖t字符串所有字符的最小子串,还是先用暴力枚举的方法,大致理清操作步骤,定义left和right,left和right都从0开始,如果出现了t中的字符,对应计数器就++,然后right一直往右移动,直到最后一个字符,然后left往右移动一步,right又从left位置开始,继续往右移动,循环上面的步骤,直到left也到最后的字符位置。直到len-1开始切割。原创 2024-11-29 23:20:34 · 732 阅读 · 0 评论 -
系统学习算法:专题一 双指针
至此,双指针算法就大致学习完毕了,我们来稍微总结一下双指针只是一种思路,并不是真正的指针,既可以用数组下标作为指针,也可以用值作为指针。原创 2024-11-04 23:20:12 · 920 阅读 · 2 评论