算法题解索引
一句话说明
这页不是为了堆题,而是把常见算法和对应题型绑在一起,方便按“套路”刷题。
建议的专题顺序
- 双指针
- 二分查找
- BFS / DFS
- 回溯
- 动态规划
- 贪心
常见算法与代表题型
| 算法 | 代表题 | 核心抓手 |
|---|---|---|
| 双指针 | 两数之和 II、三数之和 | 收缩区间 |
| 二分查找 | 搜索插入位置、左右边界 | 单调性 |
| BFS | 岛屿、最少步数 | 按层扩展 |
| DFS / 回溯 | 全排列、子集、单词搜索 | 做选择再撤销 |
| 动态规划 | 打家劫舍、LCS、编辑距离 | 状态定义 |
| 贪心 | 跳跃游戏、区间覆盖 | 局部最优 |
一个代表性 Go 模板:标准二分
func binarySearch(nums []int, target int) int {
left, right := 0, len(nums)-1
for left <= right {
mid := left + (right-left)/2
if nums[mid] == target {
return mid
}
if nums[mid] < target {
left = mid + 1
} else {
right = mid - 1
}
}
return -1
}一个代表性 Go 模板:回溯子集
func subsets(nums []int) [][]int {
result := [][]int{}
path := []int{}
var backtrack func(start int)
backtrack = func(start int) {
result = append(result, append([]int(nil), path...))
for i := start; i < len(nums); i++ {
path = append(path, nums[i])
backtrack(i + 1)
path = path[:len(path)-1]
}
}
backtrack(0)
return result
}刷题原则
- 先按算法专题刷,不要一开始就混题海
- 每个专题至少总结一个稳定 Go 模板
- 做题时先问“为什么是这个算法”,再问“代码怎么写”
相关页面
返回:LeetCode题解