第1章 浅谈算法 1
1.1 算法概述 1
1.2 度量算法 2
1.2.1 时间复杂度 2
1.2.2 空间复杂度 2
1.3 Python&Pythonic 3
第2章 基础算法之排序 5
2.1 冒泡排序 5
2.1.1 原理 5
2.1.2 代码 8
2.2 选择排序 10
2.2.1 原理 11
2.2.2 代码 12
2.3 插入排序 13
2.3.1 原理 14
2.3.2 代码 15
2.4 归并排序 17
2.4.1 原理 17
2.4.2 代码 20
2.5 快速排序 21
2.5.1 原理 21
2.5.2 代码 24
2.6 计数排序 26
2.6.1 原理 26
2.6.2 代码 28
2.7 算法小结 30
第3章 基础算法之查找 31
3.1 顺序查找 31
3.1.1 原理 31
3.1.2 代码 33
3.2 二分法查找 36
3.2.1 原理 36
3.2.2 代码 37
3.3 斐波那契查找 39
3.3.1 原理 39
3.3.2 代码 41
3.4 插值查找 43
3.4.1 原理 43
3.4.2 代码 45
3.5 分块查找 47
3.5.1 原理 47
3.5.2 代码 48
第4章 数组 51
4.1 从排序数组中删除重复项 51
4.1.1 算法要求 51
4.1.2 解题思路 52
4.1.3 解题代码 53
4.2 买卖股票的最佳时期Ⅱ 55
4.2.1 算法要求 55
4.2.2 解题思路 55
4.2.3 解题代码 57
4.3 旋转数组 58
4.3.1 算法要求 58
4.3.2 解题思路 59
4.3.3 解题代码 61
4.4 存在重复 65
4.4.1 算法要求 65
4.4.2 解题思路 65
4.4.3 解题代码 66
4.5 只出现一次的数字 71
4.5.1 算法要求 71
4.5.2 解题思路 71
4.5.3 解题代码 72
4.6 两个数组的交集Ⅱ 75
4.6.1 算法要求 75
4.6.2 解题思路 76
4.6.3 解题代码 78
4.7 加一 82
4.7.1 算法要求 82
4.7.2 解题思路 82
4.7.3 解题代码 84
4.8 移动零 87
4.8.1 算法要求 87
4.8.2 解题思路 87
4.8.3 解题代码 89
4.9 两数之和 92
4.9.1 算法要求 92
4.9.2 解题思路 92
4.9.3 解题代码 93
4.10 有效的数独 96
4.10.1 算法要求 96
4.10.2 解题思路 97
4.10.3 解题代码 99
4.11 旋转图像 100
4.11.1 算法要求 100
4.11.2 解题思路 101
4.11.3 解题代码 102
第5章 字符串 104
5.1 反转字符串 104
5.1.1 算法要求 104
5.1.2 解题思路 104
5.1.3 解题代码 105
5.2 整数反转 108
5.2.1 算法要求 108
5.2.2 解题思路 109
5.2.3 解题代码 110
5.3 字符串中的第一个唯一字符 113
5.3.1 算法要求 113
5.3.2 解题思路 114
5.3.3 解题代码 115
5.4 有效的字母异位词 118
5.4.1 算法要求 118
5.4.2 解题思路 119
5.4.3 解题代码 120
5.5 验证回文字符串 123
5.5.1 算法要求 123
5.5.2 解题思路 124
5.5.3 解题代码 125
5.6 字符串转整数 128
5.6.1 算法要求 128
5.6.2 解题思路 129
5.6.3 解题代码 130
5.7 实现strStr() 132
5.7.1 算法要求 132
5.7.2 解题思路 132
5.7.3 解题代码 133
5.8 报数 135
5.8.1 算法要求 135
5.8.2 解题思路 135
5.8.3 解题代码 137
5.9 最长公共前缀 139
5.9.1 算法要求 139
5.9.2 解题思路 139
5.9.3 解题代码 140
第6章 链表 142
6.1 删除链表中的节点 142
6.1.1 算法要求 142
6.1.2 解题思路 143
6.1.3 解题代码 143
6.2 删除链表的倒数第n个节点 145
6.2.1 算法要求 145
6.2.2 解题思路 145
6.2.3 解题代码 146
6.3 反转链表 150
6.3.1 算法要求 150
6.3.2 解题思路 150
6.3.3 解题代码 151
6.4 合并两个有序链表 154
6.4.1 算法要求 154
6.4.2 解题思路 154
6.4.3 解题代码 156
6.5 回文链表 157
6.5.1 算法要求 157
6.5.2 解题思路 158
6.5.3 解题代码 158
6.6 环形链表 160
6.6.1 算法要求 160
6.6.2 解题思路 161
6.6.3 解题代码 161
第7章 树 164
7.1 二叉树的最大深度 164
7.1.1 算法要求 164
7.1.2 解题思路 164
7.1.3 解题代码 165
7.2 验证二叉搜索树 167
7.2.1 算法要求 167
7.2.2 解题思路 167
7.2.3 解题代码 168
7.3 对称二叉树 170
7.3.1 算法要求 170
7.3.2 解题思路 170
7.3.3 解题代码 171
7.4 二叉树的层次遍历 173
7.4.1 算法要求 173
7.4.2 解题思路 173
7.4.3 解题代码 174
7.5 将有序数组转换成二叉搜索树 176
7.5.1 算法要求 176
7.5.2 解题思路 176
7.5.3 解题代码 177
第8章 排序和搜索&设计问题 179
8.1 合并两个有序数组 179
8.1.1 算法要求 179
8.1.2 解题思路 179
8.1.3 解题代码 181
8.2 第一个错误的版本 184
8.2.1 算法要求 184
8.2.2 解题思路 184
8.2.3 解题代码 185
8.3 数组洗牌(Shuffle an Array) 187
8.3.1 算法要求 187
8.3.2 解题思路 187
8.3.3 解题代码 188
8.4 最小栈 190
8.4.1 算法要求 190
8.4.2 解题思路 190
8.4.3 解题代码 190
第9章 动态规划 193
9.1 爬楼梯 193
9.1.1 算法要求 193
9.1.2 解题思路 194
9.1.3 解题代码 195
9.2 买卖股票的最佳时机 198
9.2.1 算法要求 198
9.2.2 解题思路 199
9.2.3 解题代码 199
9.3 最大子序和 202
9.3.1 算法要求 202
9.3.2 解题思路 203
9.3.3 解题代码 203
9.4 寻找宝物 205
9.4.1 算法要求 205
9.4.2 解题思路 205
9.4.3 解题代码 206
第10章 数学 208
10.1 FizzBuzz 208
10.1.1 算法要求 208
10.1.2 解题思路 209
10.1.3 解题代码 209
10.2 计算质数 211
10.2.1 算法要求 211
10.2.2 解题思路 211
10.2.3 解题代码 216
10.3 3的幂 219
10.3.1 算法要求 219
10.3.2 解题思路 220
10.3.3 解题代码 220
10.4 罗马数字转整数 222
10.4.1 算法要求 222
10.4.2 解题思路 223
10.4.3 解题代码 223
第11章 其他 226
11.1 位1的个数 226
11.1.1 算法要求 226
11.1.2 解题思路 226
11.1.3 解题代码 227
11.2 汉明距离 228
11.2.1 算法要求 228
11.2.2 解题思路 229
11.2.3 解题代码 229
11.3 颠倒二进制位 231
11.3.1 算法要求 231
11.3.2 解题思路 231
11.3.3 解题代码 232
11.4 帕斯卡三角形 233
11.4.1 算法要求 233
11.4.2 解题思路 234
11.4.3 解题代码 234
11.5 有效的括号 236
11.5.1 算法要求 236
11.5.2 解题思路 236
11.5.3 解题代码 237
11.6 缺失数字 239
11.6.1 算法要求 239
11.6.2 解题思路 239
11.6.3 解题代码 239