算法

算法学习

参考链接:应该是最全的算法学习路线了吧法学习路线了吧_大学算法学习路线 cdsn-CSDN博客

1.基础算法

a.递归

参考链接:递归算法——超详细讲解(图文并茂)-CSDN博客

递归,在数学与计算机科学中,是指在方法的定义中使用方法自身。也就是说,递归算法是一种直接或者间接调用自身方法的算法。简言之:在定义自身的同时又出现自身的直接或间接调用。

简单的案例:

509. 斐波那契数

斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 01 开始,后面的每一项数字都是前面两项数字的和。也就是:

F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1

给定 n ,请计算 F(n)

func fib(n int) int {
if n == 0 || n == 1 {
return n
}
return fib(n-1) + fib(n-2)
}

通过递推关系,为我们可以写出这样的代码。

递归是相对简单的算法了。

就是你在 函数里面 调用函数本身 的一种算法。

注意:一定要有递归的退出条件。

b.最短路径Dijkstra

参考:最短路算法(Dijkstra + SPFA + Floyd) - 知乎 (zhihu.com)

Dijkstra算法是一种较为经典的最短路径求解算法,它的整体思路和前面的PrimPrim算法非常相似,但是又有一些不同之处。接下来首先对Dijkstra算法的整体流程进行一个大致的了解。

我们要了解邻接矩阵邻接表

https://leetcode.cn/problems/network-delay-time/solutions/2668220/liang-chong-dijkstra-xie-fa-fu-ti-dan-py-ooe8/

题单:

  1. 设计可以求最短路径的图类 1811
  2. 概率最大的路径 1846
  3. 最小体力消耗路径 1948 做法不止一种
  4. 使网格图至少有一条有效路径的最小代价 2069 也可以 0-1 BFS
  5. 从第一个节点出发到最后一个节点的受限路径数 2079
  6. 到达目的地的方案数 2095
  7. 前往目标的最小代价 2154
  8. 到达目的地的第二短时间 2202 也可以 BFS
  9. 细分图中的可到达节点 2328
  10. 得到要求路径的最小带权子图 2364
  11. 在网格图中访问一个格子的最少时间 2382
  12. 修改图中的边权 2874
  13. 前往目标城市的最小费用(会员题)
  14. 购买苹果的最低成本(会员题)
  15. 找到最短路径的 K 次跨越(会员题)
  16. 找到最近的标记节点(会员题)
    LCP 35. 电动车游城市