文章和代码已经归档至【Github仓库:<https://github.com/timerring/algorithms-notes> 】或者公众号【AIShareLab】回复 算法笔记 也可获取。并查集1.将两个集合合并2.询问两个元素是否在一个集合当中。基本原理:每个集合用一棵树来表示。\*\树根的编号就是整个集合的编号。\\*每个节点存储它的父节点,p\[]表示x的父节点。如何判
文章和代码已经归档至【Github仓库:<https://github.com/timerring/algorithms-notes> 】或者公众号【AIShareLab】回复 算法笔记 也可获取。Trie树(字典树)Trie树是用来快速存储和查找 字符串集合的数据结构。某个字符串集合对应的有根树。树的每条边上对应有恰好一个字符,每个顶点代表从根到该节点的路径所对应的字符串(将所有经过
文章和代码已经归档至【Github仓库:https://github.com/timerring/algorithms-notes 】或者公众号【AIShareLab】回复 算法笔记 也可获取。KMPKMP算法,又称模式匹配算法,能够在线性时间内判定字符串 A[1\N]是否为字符串B[1\M]的子串,并求出字符串A在字符串B中各次出现的位置。例题:给定一个字符串 S,以及一个模式串 P,所有字符串
文章和代码已经归档至【Github仓库:https://github.com/timerring/algorithms-notes 】或者【AIShareLab】回复 算法笔记 也可获取。队列算法模板// hh 表示队头,tt表示队尾 int q[N], hh = 0, tt = -1; // 向队尾插入一个数 q[ ++ tt] = x; // 从队头弹出一个数 hh ++ ; // 队头
文章和代码已经归档至【Github仓库:https://github.com/timerring/algorithms-notes 】或者公众号【AIShareLab】回复 算法笔记 也可获取。单调栈模板栈:先进后出。队列:先进先出。数组模拟栈和队列相较于STL的好处在于速度快,虽然在实际编译的时候会有O2优化,使两者相差无几,但是在算法题中一般没有优化。栈算法模板// 栈定义为stk[N],tt
文章和代码已经归档至【Github仓库:algorithms-notes】或者公众号【AIShareLab】回复 算法笔记 也可获取。贪心的核心思想:最优解,短视。按照数据规模猜测贪心,一般在是排序,或是O(n)的做法,扫描一边,1000左右是两重循环,100左右是三重循环。股票买卖 II给定一个长度为 N 的数组,数组中的第 i 个数字表示一个给定股票在第 i 天的价格。设计一个算法来计算你所能
文章和代码已经归档至【Github仓库:algorithms-notes】或者公众号【AIShareLab】回复 算法笔记 也可获取。日志统计小明维护着一个程序员论坛。现在他收集了一份”点赞”日志,日志共有 N 行。其中每一行的格式是:ts id表示在 ts 时刻编号 id 的帖子收到一个”赞”。现在小明想统计有哪些帖子曾经是”热帖”。如果一个帖子曾在任意一个长度为 D 的时间段内收到不少
文章和代码已经归档至【Github仓库:algorithms-notes】或者公众号【AIShareLab】回复 算法笔记 也可获取。首先,计算机中常用的数据结构是栈和队列。栈:先进后出,通常应用是递归,DFS。队列:先进先出,通常应用是 BFS 。过程如下所示:每次取出队头元素,并且把其拓展的元素放在队尾。上面过程可知,遍历的过程以及入队的过程都是按照BFS(1 2 3...10)的顺序
文章和代码已经归档至【Github仓库:algorithms-notes】或者公众号【AIShareLab】回复 算法笔记 也可获取。应用:求区间最大值,求染色面积,长度,最大连续和等等。思想操作一:单点修改 ()单点修改的基础思想就是仅修改信息需要变化的节点,类似一个递归 + 回溯的过程。操作二:区间查询 ()查询也是一个递归的过程,如果查询的区间已经把当前区间完全包含了,则可以返回该区
文章和代码已经归档至【Github仓库:algorithms-notes】或者公众号【AIShareLab】回复 算法笔记 也可获取。树状数组注意:树状数组的坐标一定要从1开始!树状数组的应用主要是:快速(在O(logn)的复杂度内):在某个位置上加上一个数(单点修改)求某一个的前缀和(区间查询)其他的变式都是由这两个基本功能转换而来,例如单点查询,区间修改等等。它与纯前缀和的区别在于可以
区间合并⭐写在前面的话:本系列文章旨在复习算法刷题中常用的基础算法与数据结构,配以详细的图例解释,总结相应的代码模板,同时结合例题以达到最佳的学习效果。本专栏面向算法零基础但有一定的C++基础的学习者。若C++基础不牢固,可参考:10min快速回顾C++语法,进行语法复习。?本文已收录于算法基础系列专栏: 算法基础教程 免费订阅,持续更新。基本思想将多个区间进行合并,其中有交集的区
⭐写在前面的话:本系列文章旨在复习算法刷题中常用的基础算法与数据结构,配以详细的图例解释,总结相应的代码模板,同时结合例题以达到最佳的学习效果。本专栏面向算法零基础但有一定的C++基础的学习者。若C++基础不牢固,可参考:10min快速回顾C++语法,进行语法复习。?本文已收录于算法基础系列专栏: 算法基础教程 免费订阅,持续更新。双指针算法双指针算法的常见情况:双指针在两个数组上
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号