跳转至

算法

位运算算法详解

位操作(Bit Manipulation)是程序设计中对位模式或二进制数的一元和二元操作。虽然现代编译器已对基本运算进行了优化,但掌握位运算技巧仍然是算法面试和底层开发的必备技能。

动态规划算法详解

动态规划(Dynamic Programming,DP)是一种通过将原问题分解为相对简单的子问题来求解复杂问题的方法。它常用于具有 重叠子问题最优子结构 性质的问题。

动态规划有两种求解方式:

  • 自顶向下:记忆化递归
  • 自底向上:递推

动态规划的核心特点是 无后效性——一旦子问题的解确定,后续计算不会修改它。

算法刷题问题总结

在刷题的过程中遇到了一些经典问题和经典解法,我觉得很有必要对其进行归纳与总结,避免未来遇到同样的问题手忙脚乱。

深度优先搜索算法详解

深度优先搜索(Depth-First Search,DFS)是一种用于遍历或搜索树/图的算法。其核心思想是:对每一个可能的分支路径深入到底,直到不能再深入为止,然后回溯到上一个节点继续探索其他分支。

因发明深度优先搜索算法,约翰·霍普克洛夫特与罗伯特·塔扬于 1986 年共同获得计算机领域的最高奖——图灵奖。

递归与回溯算法详解

递归是计算机科学中的核心概念,是许多算法和数据结构的基础。其核心思想是:将问题分解为更小的子问题,直到子问题足够简单可以直接求解。

每个递归函数都需要包含:

  1. 基本情况(Base Case):不使用递归就能直接求解的终止条件
  2. 递推关系(Recurrence Relation):将问题拆分到基本情况的规则

广度优先搜索算法详解

广度优先搜索(Breadth-First Search,BFS)是一种图形搜索算法。它从根节点开始,沿着树/图的宽度进行遍历——先访问当前层的所有节点,再访问下一层。

双指针算法详解

双指针是一种用两个变量在线性结构上遍历来解决问题的技巧。根据指针移动方向,分为 相向双指针(两指针从两端向中间移动)和 快慢指针(两指针同向移动,速度不同)。

二分查找算法详解

二分查找(Binary Search)是一种在 有序数组 中查找目标值的高效算法,时间复杂度为 O(log n)。其核心思想是「减而治之」——通过比较中间元素,每次将搜索范围缩小一半。

滑动窗口算法详解

滑动窗口是一种通过双指针同向移动来解决数组/字符串问题的技巧。本质上是暴力解法的优化——通过维护一个「窗口」避免重复计算。掌握滑动窗口的关键在于:理解什么时候扩大窗口,什么时候缩小窗口