Skip to main content

技巧

LeetCode刷题时,你可能会用到以下常用的算法技巧和方法来解决问题:

  1. 双指针技巧

    • 快慢指针:用于检测链表中的循环、寻找中间节点等。
    • 对撞指针:用于有序数组的问题,如两数之和。
  2. 滑动窗口

    • 用于解决数组或字符串中的子元素问题,比如找到最长的无重复字符的子串。
  3. 二分查找

    • 用于在有序数组中快速查找元素,也可以用于解决一些最大化最小值问题。
  4. 哈希表

    • 用于快速查找、去重、以及用于解决两数之和等问题。
  5. 深度优先搜索(DFS)和广度优先搜索(BFS)

    • 用于树和图的搜索问题,包括寻找路径、连通分量等。
  6. 动态规划(DP)

    • 用于解决最优子结构问题,比如最长公共子序列、最大子数组和等。
  7. 贪心算法

    • 用于解决局部最优解可以得到全局最优解的问题,比如区间覆盖、硬币找零。
  8. 回溯算法

    • 用于解决组合、排列、子集等需要枚举所有可能性的问题。
  9. 分治算法

    • 用于将大问题分解为小问题独立解决,然后合并结果,比如归并排序、快速排序。
  10. 位操作

    • 用于解决数字问题,可以提高计算效率,比如找出不重复的元素、计算两个整数的和。
  11. 数学技巧

    • 用于简化问题或直接计算结果,比如使用公式解决数学问题、素数筛选等。
  12. 递归

    • 用于解决可以分解为更小子问题的问题,递归通常与DFS结合使用。
  13. 模拟

    • 直接按照问题描述模拟整个过程,适用于那些没有明显算法技巧的问题。
  14. 并查集

    • 用于处理一些集合合并及查询问题,常用于图的连通分量问题。
  15. 前缀和/积分图

    • 用于处理数组/矩阵区域和的问题,可以快速计算出任意区域的和。
  16. 单调栈/单调队列

    • 用于解决需要维护数据集合中元素单调性的问题,比如找到下一个更大元素。
  17. 树状数组(Binary Indexed Tree)和线段树

    • 用于处理数据动态更新的情况下区间查询问题。

这些技巧在LeetCode上的问题中经常被用到,通常一个问题可能有多种解法,选择合适的算法技巧可以大大提高解题效率。熟练掌握这些技巧需要大量的练习和理解。