算法
左手121
这个作者很懒,什么都没留下…
展开
-
并查集(Disjoint Set)
并查集(Disjoint Set) 简介 并查集是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题。一些常见的用途有求连通子图、求最小生成树的 Kruskal 算法和求最近公共祖先(Least Common Ancestors, LCA)等。 常常在使用中以森林来表示。集就是让每个元素构成一个单元素的集合,也就是按一定顺序将属于同一组的元素所在的集合合并。 详细内容可以参考视频:视频地址 思路 初始化将所有的元素都独立为一个集合/树,形成森林 循环处理 x -> y 组成一个路原创 2020-06-08 19:14:19 · 225 阅读 · 0 评论 -
动态规划 (Dynamic programming / DP)
动态规划 (Dynamic programming / DP) 简介 动态规划主要用来解决一些希望找到问题最优解的优化问题。 一种可以用动态规划解决的情况就是会有反复出现的子问题,然后这些子问题还会包含更小的子问题。相比于不断尝试去解决这些反复出现的子问题,动态规划会尝试一次解决更小的子问题。之后我们可以将结果输出记录在表格中,我们在之后的计算中可以把这些记录作为问题的原始解。 以下是两种不同的动态规划解决方案: 自上而下:你从最顶端开始不断地分解问题,直到你看到问题已经分解到最小并已得到解决,之后只用返原创 2020-06-08 19:13:48 · 174 阅读 · 0 评论 -
快慢指针算法
快慢指针 简介 快慢指针就是定义两根指针,移动的速度一快一慢,以此来制造出自己想要的差值。这个差值可以让我们找到链表上相应的节点。 求一个链表的中间值,我们将快指针每次走两步,慢指针每次走一步。当快指针到达末尾,慢指针就是中间值。 删除链表的倒数第 N 个值,我们将快指针每次走 1 步,慢指针每次走 1 步但是比快指针慢 N 步。当快指针到达末尾,慢指针就是需要删除的点。 判断链表是否是循环链表,我们将快指针每次走两步,慢指针每次走一步。当快指针和慢指针相遇就表示有环,否则没有。类似我们操场上跑步,如果是原创 2020-06-08 19:13:20 · 269 阅读 · 0 评论