代码随想录――跟着Carl学算法
新华书店全新正版书籍图书 保证_可开发票_极速发货支持7天无理由
¥
67.6
4.9折
¥
138
全新
库存5件
作者孙秀洋
出版社电子工业出版社
ISBN9787121423000
出版时间2021-12
装帧平装
开本16开
定价138元
货号31315278
上书时间2024-10-15
商品详情
- 品相描述:全新
- 商品描述
-
目录
目录
第1章 准备面试要知己知彼1
1.1 面试官为什么要考查算法1
1.2 编程语言2
1.2.1 学好算法之前更要学好编程语言2
1.2.2 代码规范2
1.3 如何写简历5
1.3.1 简历模板5
1.3.2 谨慎使用“精通”5
1.3.3 拿不准的内容绝对不要写在简历上5
1.3.4 项目经验应该如何写6
1.3.5 博客的重要性7
1.4 企业技术面试的流程7
1.4.1 一面――机试面7
1.4.2 二面――基础算法面8
1.4.3 三面――综合技术面8
1.4.4 四面――技术leader面8
1.4.5 五面――HR面9
1.5 本章小结10
第2章 程序的性能分析11
2.1 时间复杂度分析11
2.1.1 什么是时间复杂度11
2.1.2 如何描述时间复杂度12
2.1.3 递归算法的时间复杂度分析14
2.2 程序的运行时间17
2.2.1 超时是怎么回事17
2.2.2 从硬件配置看计算机的性能18
2.2.3 测试计算机的运行速度18
2.3 编程语言的内存管理20
2.3.1 C++的内存管理21
2.3.2 如何计算程序占用多少内存22
2.3.3 内存对齐22
2.4 空间复杂度分析24
2.4.1 什么是空间复杂度24
2.4.2 递归算法的空间复杂度分析25
2.4.3 以空间换时间是常见的优化思路32
2.5 本章小结33
第3章 数组34
3.1 数组理论基础34
3.2 二分查找36
3.2.1 二分法写法(一)37
3.2.2 二分法写法(二)38
3.3 移除元素39
3.3.1 暴力解法40
3.3.2 双指针法41
3.4 长度最小的子数组42
3.4.1 暴力解法42
3.4.2 滑动窗口43
3.5 这个循环转懵了很多人45
3.5.1 循环不变量45
3.5.2 代码实现46
3.6 本章小结48
第4章 链表49
4.1 链表理论基础49
4.1.1 链表的类型49
4.1.2 链表的存储方式50
4.1.3 链表的定义51
4.1.4 链表的操作52
4.1.5 性能分析52
4.2 用虚拟头节点会方便得多53
4.3 链表常见的六个操作57
4.4 反转链表60
4.4.1 双指针法60
4.4.2 递归法61
4.5 删除倒数第n个节点62
4.6 环形链表64
4.6.1 判断链表是否有环65
4.6.2 寻找环的入口66
4.7 本章小结69
第5章 哈希表70
5.1 哈希表理论基础70
5.1.1 哈希函数71
5.1.2 哈希碰撞71
5.1.3 常见的三种哈希结构73
5.2 有效的字母异位词74
5.3 两个数组的交集76
5.4 两数之和78
5.5 四数相加80
5.6 三数之和81
5.6.1 哈希解法81
5.6.2 双指针法82
5.7 四数之和85
5.8 本章小结87
第6章 字符串88
6.1 字符串与数组的区别88
6.2 反转字符串89
6.3 反转字符串II90
6.4 反转字符串里的单词92
6.5 KMP算法理论基础96
6.5.1 什么是KMP算法96
6.5.2 什么是前缀表96
6.5.3 为什么一定要用前缀表97
6.5.4 如何计算前缀表98
6.5.5 时间复杂度分析100
6.6 使用KMP匹配字符串101
6.6.1 构造next数组101
6.6.2 使用next数组做匹配103
6.6.3 前缀表统一减一的代码实现104
6.6.4 前缀表(不减一)的代码实现105
6.7 找到重复的子字符串107
6.8 本章小结109
第7章 栈与队列110
7.1 栈与队列理论基础110
7.2 用栈组成队列112
7.3 用队列组成栈114
7.3.1 使用两个队列实现栈115
7.3.2 使用一个队列实现栈117
7.4 匹配括号118
7.5 逆波兰表达式120
7.6 滑动窗口最大值122
7.7 前k个高频元素126
7.8 接雨水129
7.8.1 双指针解法130
7.8.2 动态规划解法132
7.8.3 单调栈解法133
7.9 本章小结137
第8章 二叉树139
8.1 二叉树理论基础139
8.1.1 二叉树的种类139
8.1.2 二叉树的存储方式141
8.1.3 二叉树的遍历方式142
8.1.4 二叉树的定义143
8.2 前中后序的递归遍历144
8.3 前中后序的迭代遍历146
8.3.1 前序遍历146
8.3.2 中序遍历147
8.3.3 后序遍历148
8.4 前、中、后序统一迭代法149
8.5 二叉树的层序遍历152
8.6 反转二叉树155
8.6.1 递归法156
8.6.2 迭代法156
8.7 对称二叉树158
8.7.1 递归法159
8.7.2 迭代法162
8.8 二叉树的最大深度164
8.8.1 递归法165
8.8.2 迭代法166
8.9 二叉树的最小深度167
8.9.1 递归法168
8.9.2 迭代法170
8.10 平衡二叉树170
8.10.1 递归法173
8.10.2 迭代法175
8.11 二叉树的所有路径176
8.11.1 递归法177
8.11.2 迭代法182
8.12 路径总和183
8.12.1 递归法183
8.12.2 迭代法186
8.12.3 路径总和II187
8.13 构造一棵二叉树189
8.13.1 使用中序与后序遍历序列构造二叉树189
8.13.2 使用前序与中序遍历序列构造二叉树195
8.13.3 相关思考197
8.14 合并两棵二叉树197
8.14.1 递归198
8.14.2 迭代法200
8.15 在二叉搜索树中寻找节点201
8.15.1 递归法202
8.15.2 迭代法203
8.16 验证二叉搜索树204
8.16.1 递归法205
8.16.2 迭代法207
8.17 二叉搜索树的最小绝对差208
8.17.1 递归法208
8.17.2 迭代法209
8.18 二叉搜索树中的众数210
8.18.1 递归法211
8.18.2 迭代法215
8.19 二叉树的最近公共祖先216
8.19.1 普通二叉树216
8.19.2 二叉搜索树221
8.20 在二叉搜索树中插入一个节点224
8.20.1 递归法225
8.20.2 迭代法227
8.21 在二叉搜索树中删除一个节点228
8.21.1 递归法228
8.21.2 迭代法230
8.22 修剪二叉搜索树231
8.22.1 递归法232
8.22.2 迭代法234
8.23 构造一棵平衡二叉搜索树235
8.23.1 递归法236
8.23.2 迭代法238
8.24 本章小结239
第9章 回溯算法240
9.1 回溯算法理论基础240
9.1.1 什么是回溯算法240
9.1.2 回溯法的性能240
9.1.3 回溯法可以解决的问题240
9.1.4 如何理解回溯法241
9.1.5 回溯法模板241
9.2 组合问题243
9.2.1 回溯算法244
9.2.2 剪枝优化248
9.3 组合总和(一)250
9.3.1 回溯算法251
9.3.2 剪枝优化254
9.4 电话号码的字母组合255
9.5 组合总和(二)260
9.5.1 回溯算法261
9.5.2 剪枝优化263
9.6 组合总和(三)265
9.7 分割回文串270
9.8 复原IP地址274
9.9 子集问题(一)279
9.10 子集问题(二)281
9.11 递增子序列284
9.11.1 回溯算法285
9.11.2 哈希优化287
9.12 排列问题(一)288
9.13 排列问题(二)291
9.13.1 回溯算法291
9.13.2 拓展293
9.14 N皇后问题296
9.15 解数独301
9.15.1 回溯算法302
9.15.2 判断棋盘是否合法304
9.16 本章小结305
第10章 贪心算法306
10.1 贪心算法理论基础306
10.1.1 什么是贪心306
10.1.2 贪心的套路306
10.2 分发饼干307
10.3 摆动序列309
10.4 最大子序和312
10.5 买卖股票的最佳时机II314
10.6 跳跃游戏316
10.7 跳跃游戏II318
10.7.1 贪心解法(一)320
10.7.2 贪心解法(二)320
10.8 加油站322
10.8.1 暴力解法323
10.8.2 贪心解法(一)324
10.8.3 贪心解法(二)325
10.9 分发糖果327
10.10 柠檬水找零330
10.11 用最少数量的箭射爆气球332
10.12 合并区间335
10.13 单调递增的数字338
10.13.1 暴力解法338
10.13.2 贪心解法339
10.14 本章小结340
第11章 动态规划341
11.1 动态规划理论基础341
11.1.1 动态规划题目的解题步骤341
11.1.2 动态规划应该如何排查问题342
11.2 斐波那契数343
11.2.1 动态规划解法344
11.2.2 递归解法345
11.3 爬楼梯346
11.4 使用最低花费爬楼梯349
11.5 不同路径(一)353
11.5.1 深度优先搜索354
11.5.2 动态规划355
11.5.3 数论方法356
11.6 不同路径(二)358
11.7 整数拆分361
11.7.1 动态规划362
11.7.2 贪心算法364
11.8 不同的二叉搜索树364
11.9 0-1背包理论基础369
11.9.1 二维dp数组370
11.9.2 一维dp数组375
11.10 分割等和子集379
11.11 目标和382
11.12 一和零385
11.13 完全背包理论基础388
11.14 零钱兑换(一)392
11.15 拼凑一个正整数395
11.16 多步爬楼梯398
11.17 零钱兑换(二)399
11.18 完全平方数402
11.19 单词拆分405
11.19.1 回溯算法406
11.19.2 背包问题407
11.20 买卖股票的最佳时机410
11.20.1 暴力枚举410
11.20.2 贪心算法411
11.20.3 动态规划411
11.21 买卖股票的最佳时机II414
11.22 买卖股票的最佳时机III416
11.23 买卖股票的最佳时机IV420
11.24 最佳买卖股票时机(含冷冻期)423
11.25 买卖股票的最佳时机(含手续费)426
11.26 最长递增子序列428
11.27 最长连续递增序列430
11.27.1 动态规划430
11.27.2 贪心算法432
11.28 最长重复子数组433
11.29 最长公共子序列436
11.30 不相交的线438
11.31 最大子序和440
11.32 判断子序列441
11.33 不同的子序列444
11.34 两个字符串的删除操作447
11.35 编辑距离450
11.36 回文子串453
11.36.1 动态规划453
11.36.2 双指针法456
11.37 最长回文子序列457
11.38 本章小结
内容摘要
本书归纳了程序员面试中的经典算法题,并按照由浅入深、循序渐进的顺序讲解。本书首先讲解程序员面试时需要了解的制作简历的技巧和IT名企的面试流程,以及面试时经常忽略的代码规范性问题。然后详细分析程序的时间复杂度和空间复杂库,包括如何把控程序的实际运行时间,以及编程语言的内存管理。接着讲解数组、链表、哈希表、字符串、栈与队列、二叉树、回溯算法、贪心算法、动态规划的理论基础及其相关题目。本书采用了力扣(LeetCode)的原题,方便读者在学习算法的同时,及时练习相关代码,加深对相关概念的理解。本书适合所有程序员阅读,特别是正在准备面试的程序员。希望本书可以帮助读者循序渐进地学习算法,并搭建起知识框架,提升算法功力。
主编推荐
"归纳经典算法面试题,总结经典算法的各个知识点
分析多个算法应用场景,快速构建算法知识体系"
媒体评论
"信息化和智能化对人类和世界的发展产生了巨大的影响,其中算法起着至关重要的作用。学习算法一直是计算机专业的学生感兴趣和头疼的事情,本书不像教科书一样过于理论,但又把用算法解决实际问题中所涉及的理论知识深入浅出地写出来,对广大读者来说这是一本很好值得研习的算法攻略。
王轩 哈工大计算学部副主任,哈工大(深圳)计算机科学与技术学院院长、教授,中国人工智能学会常务理事
如果说编程的内功是什么,那么一定是算法。所以我工作至今,依然保持学习算法的习惯。同时我也深感算法知识的庞杂,对于初学者来说,学习算法不是容易的事情。《代码随想录》这本书不仅抓住了算法的本质,帮助大家循序渐进地学习算法,而且从代码风格到性能分析都讲解到位,覆盖了面试中常见问题,值得大家一读。
王猛 百度智能云事业群组(ACG)技术委员会主席,百度云计算和大数据领域杰出架构师(T10)
一套稳定流畅运转的程序系统背后,选择高效合理的算法方案是关键,因此对算法能力的考察通常是技术面试时很好重要的一环。Carl的这本书系统地归纳了程序开发中常用的算法并对它们做了细致的讲解,不管是作为日常开发的工具书还是求职升阶的攻略书,都是不错的选择。
贺志强 腾讯天玑智趣工作室技术总监,T12级专家工程师
计算机专业无论是考研还是求职,数据结构与算法都是很好重要的内容,《代码随想录》系统性地讲解了数据结构与算法相关知识,做到了理论与实践并举,不仅适合程序员面试,同样可以帮助考研学子攻克初试与复试中数据结构与算法这一难关。
赵霖(@风华漫舞) 王道论坛创始人,王道考研系列图书主编"
— 没有更多了 —
以下为对购买帮助不大的评价