前缀和是一种常用的解决区间查询问题的算法。 当数组固定时,根据前缀和即可在 O(1) 时间查询任意区间的和。 当数组动态变化时,则考虑用 树状数组、 线段树 等
贪心算法是一种高效的搜索方法。在每一步,都选择当前最好的分支,最终即能得到最优解。 能用贪心算法解决的问题,对于贪心正确性的证明往往更加复杂。
动态规划是一种特殊的递归,适用于有重叠子问题的场景。 存在大量重叠的子问题时,普通的递归写法会重复计算这些子问题,浪费大量时间。 动态规划会保存
dfs(深度优先搜索算法)和 bfs(广度优先搜索算法)都是图形搜索方法, 不同的在于 dfs 先尽可能深的搜索一个分支,再尝试别的路径,而 bfs 按离起点的
二分查找是一种针对有序集合的高效查找算法,时间复杂度为 O(logN) 二分查找每一轮通过检查中间元素,将查找范围缩小一半 python 中可以直接调用 bisect 来实现二分查找 有
双指针算法一般指两个指针在数组上相向移动来解决问题的算法。 双指针算法常应用在具有某种有序性质的问题上,本质上是一种减少了搜索范围的递归。 广义
递归是指函数自己调用自己的语法现象。 一般递归用于将问题不断转化为规模更小的子问题,直到变为可以直接求解的最简单子问题。 这也就是分治法的思想。
位运算是计算机最基础的运算,包括位模式或二进制数的一元和二元操作(&、|、^、~、«、»)。 很多位运算的问题
排序算法是非常经典的一类算法,常作为算法教程的第一章。 最常用的是快速排序、归并排序、堆排序,其思想也不仅应用在排序中。 特别的,当数据范围相对
图是一种比树形结构更复杂的非线性数据结构 树形结构中的结点是一对多的关系,且有明显的层次关系 图中的顶点是多对多的关系,无明显的层次关系。 按顶点