第三阶段:核心算法
🎯 目标:掌握面试常考的8大算法思想 ⏱️ 预计时间:3-4 周
学习模块
01. 排序算法
| 算法 | 时间复杂度 | 空间复杂度 | 稳定性 |
|---|---|---|---|
| 快速排序 | O(nlogn) | O(logn) | 不稳定 |
| 归并排序 | O(nlogn) | O(n) | 稳定 |
| 堆排序 | O(nlogn) | O(1) | 不稳定 |
02. 二分查找
核心思想: 有序数组中排除一半
def binary_search(nums, target):
left, right = 0, len(nums) - 1
while left <= right:
mid = left + (right - left) // 2
if nums[mid] == target:
return mid
elif nums[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
03. 双指针
两种模式:
- 对撞指针:左右向中间移动
- 快慢指针:同向不同速
def two_pointers(arr):
left, right = 0, len(arr) - 1
while left < right:
if condition:
left += 1
else:
right -= 1
04. 滑动窗口
通用模板:
def sliding_window(s):
window = {}
left = 0
result = 0
for right in range(len(s)):
# 1. 扩大窗口
c = s[right]
window[c] = window.get(c, 0) + 1
# 2. 收缩窗口
while need_shrink:
d = s[left]
window[d] -= 1
left += 1
# 3. 更新结果
result = max(result, right - left + 1)
return result
05. 递归与回溯
回溯模板:
def backtrack(path, choices):
if 满足结束条件:
result.append(path[:])
return
for choice in choices:
path.append(choice) # 做选择
backtrack(path, new_choices) # 递归
path.pop() # 撤销选择
06. DFS / BFS
DFS 模板:
def dfs(node, visited):
if node in visited:
return
visited.add(node)
for neighbor in graph[node]:
dfs(neighbor, visited)
BFS 模板:
from collections import deque
def bfs(start):
queue = deque([start])
visited = {start}
while queue:
node = queue.popleft()
for neighbor in graph[node]:
if neighbor not in visited:
visited.add(neighbor)
queue.append(neighbor)
07. 动态规划
解题五步法:
- 确定 dp 数组含义
- 确定递推公式
- dp 数组初始化
- 确定遍历顺序
- 举例推导验证
08. 贪心算法
核心思想: 每步选局部最优,期望达到全局最优
学习建议
- 先学思想:理解算法核心思路比背代码重要
- 多画图:DFS、DP 题目必须画决策树/状态表
- 归纳模板:每类算法总结自己的解题模板
- 重复练习:同类题目做 5+ 道形成肌肉记忆
| ← 上一章:数据结构 | 下一章:LeetCode 实战 → |