《Python程序员面试算法宝典》张波 | PDF下载|ePub下载
类别: 计算机
内容简介 · · · · · ·
本书是一本讲解程序员面试笔试算法的书,代码采用Python语言编写,书中除了讲解如何解答算法问题以外,还引入了例子辅以说明,让读者更容易理解。
本书几乎将程序员面试笔试过程中算法类真题一网打尽,在题目的广度上,通过各种渠道,搜集了近3年来几乎所有IT企业面试笔试算法的高频题目,所选择题目均为企业招聘使用题目。在题目的深度上,本书由浅入深,庖丁解牛式地分析每一个题目,并提炼归纳。同时,引入例子与源代码、时间复杂度与空间复杂度的分析,这些内容是其他同类书籍所没有的。本书根据真题所属知识点进行分门别类,结构合理,条理清晰,对于读者进行学习与检索意义重大。
本书可作为计算机相关专业毕业生面试笔试的求职用书,也可以作为本科生、研究生学习数据结构与算法的辅导书籍,同时适合期望在计算机软硬件行业大显身手的计算机爱好者阅读。
作者简介 · · · · · ·
张波,硕士,Python程序员,就职于知名互联网企业,多年软件开发经验。
猿媛之家成立于2015年8月,是国内首家致力于研究程序员人生规划、程序员技能与培训、程序员就业与发展的机构,成员均毕业于国内“985”、“211”高校的计算机相关专业,就职于BAT等顶尖IT企业。我们的宗旨是“服务大众,分层对待,整体提高,打造精品”,目标是 “让天下没有找不到工作的程序员”。
目录 · · · · · ·
前言
面试笔试经验技巧篇
经验技巧1 如何巧妙地回答面试官的问题2
经验技巧2 如何回答技术性的问题3
经验技巧3 如何回答非技术性问题4
经验技巧4 如何回答快速估算类问题5
经验技巧5 如何回答算法设计问题6
经验技巧6 如何回答系统设计题9
经验技巧7 如何解决求职中的时间冲突问题11
经验技巧8 如果面试问题曾经遇见过,是否要告知面试官12
经验技巧9 被企业拒绝#是否可以再申请12
经验技巧10 如何应对自己不会回答的问题13
经验技巧11 如何应对面试官的“激将法”语言14
经验技巧12 如何处理与面试官持不同观点这个问题15
经验技巧13 关注职场暗语15
面试笔试真题解析篇
第1章 链表21
1.1 如何实现链表的逆序22
1.2 如何从无序链表中移除重复项26
1.3 如何计算两个单链表所代表的数之和29
1.4 如何对链表进行重新排序32
1.5 如何找出单链表中的倒数第k个元素35
1.6 如何检测一个较大的单链表是否有环39
1.7 如何把链表相邻元素翻转41
1.8 如何把链表以K个结点为一组进行翻转43
1.9 如何合并两个有序链表46
1.10 如何在只给定单链表中某个结点的指针的情况下删除该结点49
1.11 如何判断两个单链表(无环)是否交叉51
1.12 如何展开链接列表54
第2章 栈、队列与哈希57
2.1 如何实现栈57
2.2 如何实现队列60
2.3 如何翻转栈的所有元素64
2.4 如何根据入栈序列判断可能的出栈序列68
2.5 如何用O(1)的时间复杂度求栈中#小元素71
2.6 如何用两个栈模拟队列操作73
2.7 如何设计一个排序系统74
2.8 如何实现LRU缓存方案76
2.9 如何从给定的车票中找出旅程77
2.10 如何从数组中找出满足a+b=c+d的两个数对79
第3章 二叉树81
3.1 二叉树基础知识81
3.2 如何把一个有序整数数组放到二叉树中83
3.3 如何从顶部开始逐层打印二叉树结点数据84
3.4 如何求一棵二叉树的#大子树和87
3.5 如何判断两棵二叉树是否相等89
3.6 如何把二叉树转换为双向链表90
3.7 如何判断一个数组是否是二元查找树后序遍历的序列93
3.8 如何找出排序二叉树上任意两个结点的#近共同父结点94
3.9 如何复制二叉树101
3.10 如何在二叉树中找出与输入整数相等的所有路径102
3.11 如何对二叉树进行镜像反转104
3.12 如何在二叉排序树中找出第1个大于中间值的结点106
3.13 如何在二叉树中找出路径#大的和107
3.14 如何实现反向DNS查找缓存109
第4章 数组112
4.1 如何找出数组中唯#的重复元素112
4.2 如何查找数组中元素的#大值和#小值118
4.3 如何找出旋转数组的#小元素121
4.4 如何找出数组中丢失的数124
4.5 如何找出数组中出现奇数次的数126
4.6 如何找出数组中第k小的数128
4.7 如何求数组中两个元素的#小距离131
4.8 如何求解#小三元组距离134
4.9 如何求数组中绝#值#小的数138
4.10 如何求数组连续#大和141
4.11 如何找出数组中出现1次的数145
4.12 如何对数组旋转147
4.13 如何在不排序的情况下求数组中的中位数148
4.14 如何求集合的所有子集150
4.15 如何对数组进行循环移位152
4.16 如何在有规律的二维数组中进行高效的数据查找155
4.17 如何寻找#多的覆盖点157
4.18 如何判断请求能否在给定的存储条件下完成158
4.19 如何按要求构造新的数组160
4.20 如何获取#好的矩阵链相乘方法161
4.21 如何求解迷宫问题163
4.22 如何从三个有序数组中找出它们的公共元素165
4.23 如何求两个有序集合的交集167
4.24 如何对有大量重复的数字的数组排序171
4.25 如何对任务进行调度174
4.26 如何对磁盘分区176
第5章 字符串178
5.1 如何求一个字符串的所有排列178
5.2 如何求两个字符串的#长公共子串183
5.3 如何对字符串进行反转187
5.4 如何判断两个字符串是否为换位字符串189
5.5 如何判断两个字符串的包含关系191
5.6 如何对由大小写字母组成的字符数组排序193
5.7 如何消除字符串的内嵌括号194
5.8 如何判断字符串是否是整数196
5.9 如何实现字符串的匹配199
5.10 如何求字符串里的#长回文子串202
5.11 如何按照给定的字母序列对字符数组排序208
5.12 如何判断一个字符串是否包含重复字符210
5.13 如何找到由其他单词组成的#长单词212
5.14 如何统计字符串中连续的重复字符个数214
5.15 如何求#长递增子序列的长度215
5.16 求一个串中出现的第1个#长重复子串216
5.17 如何求解字符串中字典序#大的子序列218
5.18 如何判断一个字符串是否由另外一个字符串旋转得到220
5.19 如何求字符串的编辑距离222
5.20 如何在二维数组中寻找#短路线224
5.21 如何截取包含中文的字符串227
5.22 如何求相对路径228
5.23 如何查找到达目标词的#短链长度229
第6章 基本数字运算232
6.1 如何判断一个自然数是否是某个数的平方232
6.2 如何判断一个数是否为2的n次方234
6.3 如何不使用除法操作符实现两个正整数的除法236
6.4 如何只使用+= 操作符实现加减乘除运算240
6.5 如何根据已知随机数生成函数计算新的随机数242
6.6 如何判断1024!末尾有多少个0243
6.7 如何按要求比较两个数的大小244
6.8 如何求有序数列的第1500个数的值245
6.9 如何把十进制数(long型)分别以二进制和十六进制形式输出246
6.10 如何求二进制数中1的个数247
6.11 如何找#小的不重复数248
6.12 如何计算一个数的n次方252
6.13 如何在不能使用库函数的条件下计算n的平方根254
6.14 如何不使用^操作实现异或运算254
6.15 如何不使用循环输出1到100256
第7章 排列组合与概率257
7.1 如何求数字的组合257
7.2 如何拿到#多金币259
7.3 如何求正整数n所有可能的整数组合260
7.4 如何用一个随机函数得到另外一个随机函数262
7.5 如何等概率地从大小为n的数组中选取m个整数263
7.6 如何组合1,2,5这三个数使其和为100264
7.7 如何判断还有几盏灯泡亮着266
第8章 排序268
8.1 如何进行选择排序268
8.2 如何进行插入排序269
8.3 如何进行冒泡排序270
8.4 如何进行归并排序271
8.5 如何进行快速排序272
8.6 如何进行希尔排序275
8.7 如何进行堆排序276
8.8 如何进行基数排序278
第9章 大数据280
9.1 如何从大量的url中找出相同的url280
9.2 如何从大量数据中找出高频词281
9.3 如何找出访问百度#多的IP282
9.4 如何在大量的数据中找出不重复的整数282
9.5 如何在大量的数据中判断一个数是否存在283
9.6 如何查询#热门的查询串284
9.7 如何统计不同电话号码的个数285
9.8 如何从5亿个数中找出中位数286
9.9 如何按照query的频度排序287
9.10 如何找出排名前500的数288
· · · · · ·
面试笔试经验技巧篇
经验技巧1 如何巧妙地回答面试官的问题2
经验技巧2 如何回答技术性的问题3
经验技巧3 如何回答非技术性问题4
经验技巧4 如何回答快速估算类问题5
经验技巧5 如何回答算法设计问题6
经验技巧6 如何回答系统设计题9
经验技巧7 如何解决求职中的时间冲突问题11
经验技巧8 如果面试问题曾经遇见过,是否要告知面试官12
经验技巧9 被企业拒绝#是否可以再申请12
经验技巧10 如何应对自己不会回答的问题13
经验技巧11 如何应对面试官的“激将法”语言14
经验技巧12 如何处理与面试官持不同观点这个问题15
经验技巧13 关注职场暗语15
面试笔试真题解析篇
第1章 链表21
1.1 如何实现链表的逆序22
1.2 如何从无序链表中移除重复项26
1.3 如何计算两个单链表所代表的数之和29
1.4 如何对链表进行重新排序32
1.5 如何找出单链表中的倒数第k个元素35
1.6 如何检测一个较大的单链表是否有环39
1.7 如何把链表相邻元素翻转41
1.8 如何把链表以K个结点为一组进行翻转43
1.9 如何合并两个有序链表46
1.10 如何在只给定单链表中某个结点的指针的情况下删除该结点49
1.11 如何判断两个单链表(无环)是否交叉51
1.12 如何展开链接列表54
第2章 栈、队列与哈希57
2.1 如何实现栈57
2.2 如何实现队列60
2.3 如何翻转栈的所有元素64
2.4 如何根据入栈序列判断可能的出栈序列68
2.5 如何用O(1)的时间复杂度求栈中#小元素71
2.6 如何用两个栈模拟队列操作73
2.7 如何设计一个排序系统74
2.8 如何实现LRU缓存方案76
2.9 如何从给定的车票中找出旅程77
2.10 如何从数组中找出满足a+b=c+d的两个数对79
第3章 二叉树81
3.1 二叉树基础知识81
3.2 如何把一个有序整数数组放到二叉树中83
3.3 如何从顶部开始逐层打印二叉树结点数据84
3.4 如何求一棵二叉树的#大子树和87
3.5 如何判断两棵二叉树是否相等89
3.6 如何把二叉树转换为双向链表90
3.7 如何判断一个数组是否是二元查找树后序遍历的序列93
3.8 如何找出排序二叉树上任意两个结点的#近共同父结点94
3.9 如何复制二叉树101
3.10 如何在二叉树中找出与输入整数相等的所有路径102
3.11 如何对二叉树进行镜像反转104
3.12 如何在二叉排序树中找出第1个大于中间值的结点106
3.13 如何在二叉树中找出路径#大的和107
3.14 如何实现反向DNS查找缓存109
第4章 数组112
4.1 如何找出数组中唯#的重复元素112
4.2 如何查找数组中元素的#大值和#小值118
4.3 如何找出旋转数组的#小元素121
4.4 如何找出数组中丢失的数124
4.5 如何找出数组中出现奇数次的数126
4.6 如何找出数组中第k小的数128
4.7 如何求数组中两个元素的#小距离131
4.8 如何求解#小三元组距离134
4.9 如何求数组中绝#值#小的数138
4.10 如何求数组连续#大和141
4.11 如何找出数组中出现1次的数145
4.12 如何对数组旋转147
4.13 如何在不排序的情况下求数组中的中位数148
4.14 如何求集合的所有子集150
4.15 如何对数组进行循环移位152
4.16 如何在有规律的二维数组中进行高效的数据查找155
4.17 如何寻找#多的覆盖点157
4.18 如何判断请求能否在给定的存储条件下完成158
4.19 如何按要求构造新的数组160
4.20 如何获取#好的矩阵链相乘方法161
4.21 如何求解迷宫问题163
4.22 如何从三个有序数组中找出它们的公共元素165
4.23 如何求两个有序集合的交集167
4.24 如何对有大量重复的数字的数组排序171
4.25 如何对任务进行调度174
4.26 如何对磁盘分区176
第5章 字符串178
5.1 如何求一个字符串的所有排列178
5.2 如何求两个字符串的#长公共子串183
5.3 如何对字符串进行反转187
5.4 如何判断两个字符串是否为换位字符串189
5.5 如何判断两个字符串的包含关系191
5.6 如何对由大小写字母组成的字符数组排序193
5.7 如何消除字符串的内嵌括号194
5.8 如何判断字符串是否是整数196
5.9 如何实现字符串的匹配199
5.10 如何求字符串里的#长回文子串202
5.11 如何按照给定的字母序列对字符数组排序208
5.12 如何判断一个字符串是否包含重复字符210
5.13 如何找到由其他单词组成的#长单词212
5.14 如何统计字符串中连续的重复字符个数214
5.15 如何求#长递增子序列的长度215
5.16 求一个串中出现的第1个#长重复子串216
5.17 如何求解字符串中字典序#大的子序列218
5.18 如何判断一个字符串是否由另外一个字符串旋转得到220
5.19 如何求字符串的编辑距离222
5.20 如何在二维数组中寻找#短路线224
5.21 如何截取包含中文的字符串227
5.22 如何求相对路径228
5.23 如何查找到达目标词的#短链长度229
第6章 基本数字运算232
6.1 如何判断一个自然数是否是某个数的平方232
6.2 如何判断一个数是否为2的n次方234
6.3 如何不使用除法操作符实现两个正整数的除法236
6.4 如何只使用+= 操作符实现加减乘除运算240
6.5 如何根据已知随机数生成函数计算新的随机数242
6.6 如何判断1024!末尾有多少个0243
6.7 如何按要求比较两个数的大小244
6.8 如何求有序数列的第1500个数的值245
6.9 如何把十进制数(long型)分别以二进制和十六进制形式输出246
6.10 如何求二进制数中1的个数247
6.11 如何找#小的不重复数248
6.12 如何计算一个数的n次方252
6.13 如何在不能使用库函数的条件下计算n的平方根254
6.14 如何不使用^操作实现异或运算254
6.15 如何不使用循环输出1到100256
第7章 排列组合与概率257
7.1 如何求数字的组合257
7.2 如何拿到#多金币259
7.3 如何求正整数n所有可能的整数组合260
7.4 如何用一个随机函数得到另外一个随机函数262
7.5 如何等概率地从大小为n的数组中选取m个整数263
7.6 如何组合1,2,5这三个数使其和为100264
7.7 如何判断还有几盏灯泡亮着266
第8章 排序268
8.1 如何进行选择排序268
8.2 如何进行插入排序269
8.3 如何进行冒泡排序270
8.4 如何进行归并排序271
8.5 如何进行快速排序272
8.6 如何进行希尔排序275
8.7 如何进行堆排序276
8.8 如何进行基数排序278
第9章 大数据280
9.1 如何从大量的url中找出相同的url280
9.2 如何从大量数据中找出高频词281
9.3 如何找出访问百度#多的IP282
9.4 如何在大量的数据中找出不重复的整数282
9.5 如何在大量的数据中判断一个数是否存在283
9.6 如何查询#热门的查询串284
9.7 如何统计不同电话号码的个数285
9.8 如何从5亿个数中找出中位数286
9.9 如何按照query的频度排序287
9.10 如何找出排名前500的数288
· · · · · ·
发表回复
要发表评论,您必须先登录。