算法基础

先学什么

这一层不负责记住某一道题,而是建立分析算法、控制边界和识别题型的共同语言。建议按下面顺序学习。

flowchart LR
    A[复杂度分析] --> B[递归与迭代]
    B --> C[双指针]
    C --> D[前缀和与差分]
    D --> E[单调栈与单调队列]
    E --> F["排序 / 搜索 / DP / 图论"]

核心笔记

  1. 复杂度分析:判断算法能否在数据规模内运行,并理解均摊复杂度。
  2. 递归与迭代:看懂调用栈、递归边界和递归树。
  3. 双指针:用两个位置变量压缩嵌套枚举。
  4. 前缀和与差分:处理静态区间查询与批量区间修改。
  5. 单调栈与单调队列:维护“仍可能成为答案”的候选元素。

题型识别

题目特征优先想到关键条件
有序数组、两端选择双指针移动一端后能排除一批答案
多次查询区间和前缀和数组基本不修改
多次给区间整体加值差分最后统一还原结果
下一个更大/更小元素单调栈每个元素只需被压栈、弹栈一次
固定窗口最大/最小值单调队列队头始终是当前窗口最优候选
问“能不能跑完”复杂度分析先看数据规模,再选算法

学习检查

  • 能从循环结构估算时间复杂度。
  • 能画出一次递归的调用树和终止条件。
  • 能说明双指针每次移动排除了哪些情况。
  • 能写出带前导 0 的前缀和模板。
  • 能解释单调栈中元素为什么只会被弹出一次。

返回:算法学习导航