这里梳理了 LeetCode 面试中高频出现的核心算法题目,涵盖排序、查找、链表、动态规划等多个领域。每个知识点都配有精炼的步骤解析和核心思想总结。
一、核心排序算法
1. 快速排序
快速排序是面试里的常客,核心思想就是分治。选个基准值,把数组切两半,递归处理完就有序了。
- 步骤解析:
- 选择基准值:从数组中选一个元素作为 pivot,通常选首元素或中间元素。
- 分区操作:重排数组,让小于基准的在左边,大于的在右边。
- 递归排序:对左右子数组递归应用快速排序。
- 合并结果:原地排序,递归结束即完全有序,无需额外合并。
- 核心要点:基准值的选择直接影响性能,理想情况应选中位数。
2. 堆排序
利用堆数据结构进行选择排序,构建最大堆并反复交换堆顶与末尾元素。
- 步骤解析:
- 构建最大堆:从最后一个非叶子节点开始自底向上下沉,确保父节点大于子节点。
- 交换堆顶元素:将最大值(堆顶)与当前堆末尾交换。
- 重新调整堆:缩小堆范围,对新堆顶执行下沉操作恢复性质。
- 重复过程:直到堆大小缩减为 1。
- 核心要点:非稳定排序,时间复杂度 O(n log n),适合大数据集。
3. 归并排序
典型的分治算法,拆分至最小单元后合并有序子数组。
- 步骤解析:
- 分解数组:递归二分,直到子数组仅含一个元素。
- 合并排序:合并两个已排序的子数组。
- 递归实现:分解与合并通过递归完成。
- 辅助空间:合并需临时数组存储中间结果。
- 核心要点:稳定排序,O(n log n),适合数据量大且要求稳定性的场景。
二、经典查找算法
4. 二分查找
在有序数组中快速定位目标值的高效算法。
- 步骤解析:
- 初始化边界:
low = 0,high = 数组长度 - 1。 - 计算中间索引:
mid = low + (high - low) / 2。 - 比较中间元素:对比
arr[mid]与target。 - 调整搜索范围:根据大小关系决定向左或向右区间继续查找。
- 重复查找:直到找到目标或区间为空。
- 初始化边界:
- 核心要点:对数级比较次数,时间复杂度 O(log n)。
5. 寻找无序数组的中位数
针对无序数组,有多种高效解法。
- 常用解法:
- 排序法:排序后直接取中间位置元素。
- 快速选择:类似快速排序分区,找第 n/2 大元素。


