《PHP面试笔试算法宝典》——成为PHP高手赋能

你好,是我琉忆。

一个文艺的PHP开发工程师。

很荣幸能够在这里带来我的第四本新书——《PHP程序员面试笔试算法宝典》

一、创作过程

PHP程序员面试笔试算法宝典》主要是把往年各大互联网公司针对PHP面试所考察过的经典算法题进行罗列讲解,并按所用到的算法考点进行划分成章节,然后把常考的算法通过PHP进行解答实现,帮助每一个PHPer更好的解答PHP算法中的全部问题。给你面试PHP职位赋能。跟PHP相关的问题或跟这本书有关的问题都可以跟我联系咨询我,我的邮箱:330168885@qq.com(我的QQ:330168885),如果有什么事情也可以给我联系,我都愿意解答并且交流。感谢你,dear 读者。

二、我的书籍简介

本书是一本讲解PHP程序员面试笔试算法真题的书籍,以PHP为实现语言,除了讲解如何解答算法问题外,还引入了实例辅以说明,让读者能够更好地理解。 
本书将程序员面试笔试过程中各类算法真题一网打尽。在题目的广度上,本书收集了近三年来几乎所有IT企业面试笔试算法高频题目(包括智力题、排序、数组、栈、队列、字符串、二叉树、大数据、基础数学知识等),所选择题目均为企业招聘使用题目,这些企业涉及业务包括系统软件、搜索引擎、电子商务、手机 APP、安全关键软件等。在题目的深度上,本书由浅入深,详细分析每一道题目,并提炼归纳。同时,引入实例与源代码、时间复杂度与空间复杂度的分析,而这些内容是其他同类书籍所没有的。本书根据真题所属知识点进行归纳分类,力争做到结构合理、条理清晰,对于读者进行学习与检索意义重大。
本书是一本计算机相关专业毕业生面试笔试的求职用书,也可以作为本科生、研究生学习数据结构与算法的辅导书,同时也适合期望在计算机软硬件行业大显身手的计算机爱好者阅读。
  书籍中的算法源码可以到github上获取(下载路径):https://github.com/leoyiall/arth

 

三、章节介绍
第一部分 面试知识
  主要讲解一些面试中的应对技巧。
第二部分开始才主要讲解PHP算法题
  第一章经典算法
    那些最爱考的经典数学问题,都是一个好的算法问题,所以必须好好讲讲。
  第二章智力题
    智力题里面涵盖了逻辑计算、逻辑推理、概率组合、数学计算相关的面试问题,都是一些经典有趣的逻辑问题。
  第三章 排序算法
    对各大排序算法问题进行讲解
  第四章 链表
    经典的链表面试问题进行讲解。
  第五章 栈与队列
    主要对栈和队列的经典算法题进行讲解。
  第六章 二叉树
    经典的二叉树算法问题。
  第七章 数组
    数组在实际的算法考察中是考得最多的,所以数组的面试问题是最多的。
  第八章 基本数字运算
    基本的数字相关的面试题。
  第九章 排列组合与概率
    排列组合和概率也是面试中可能考擦的一些面试算法题。
  第十章 大数据
    经典的大数据面试相关知识考察。
四、书籍目录
  

 

前言

面试、笔试经验技巧篇

经验技巧1   如何巧妙地回答面试官的问题 2

经验技巧2   如何回答技术性的问题 3

经验技巧3   如何回答非技术性问题 4

经验技巧4   如何回答快速估算类问题 5

经验技巧5   如何回答算法设计问题 6

经验技巧6   如何回答系统设计题 8

经验技巧7   如何解决求职中的时间冲突问题 11

经验技巧8   如果面试问题曾经遇见过,是否要告知面试官 11

经验技巧9   被企业拒绝后是否可以再申请 12

经验技巧10   如何应对自己不会回答的问题 12

经验技巧11   如何应对面试官的“激将法” 13

经验技巧12   如何处理与面试官持不同观点的问题 14

经验技巧13   什么是职场暗语 14

面试、笔试真题解析篇

1  经典算法题 19

1.1  有多少苹果用来分赃 19

1.2 哪只猴子可以当大王 20

1.3  移动多少碟子才能完成汉诺塔游戏 21

1.4  如何利用约瑟夫环来保护你与你的朋友 22

1.5  怎样才能得到阿姆斯壮数 24

1.6  如何获取规定的排列组合 25

1.7  如何实现洗牌算法 26

1.8  怎样求解斐波那契数列 27

1.9  如何实现杨辉三角 28

1.10  牛的数量有多少 29

1.11  百钱买百鸡 30

1.12  经过这个路口多少次 30

1.13  球的反弹高度有多高 31

1.14  如何找出1000以内的“完数” 32

1.15  猴子吃了多少桃子 32

1.16  如何移动最少次数的三色旗 33

2 智力题 35

2.1   逻辑计算 35

2.1.1  老鼠相遇的概率是多少 35

2.1.2  如何计算时钟的三针重叠 35

2.1.3  如何喝到最多瓶汽水 36

2.1.4  住旅店花了多少钱 36

2.1.5  商人可卖出多少根胡萝卜 36

2.1.6  如何判断哪个开关控制着哪盏灯 37

2.1.7  如何用烧绳来计算时间 37

2.1.8  如何用水壶获取指定的水量 37

2.1.9  卖鸡总共赚了多少 37

2.1.10  跳高名次是多少 38

2.1.11  如何根据银币猜盒子 39

2.1.12  马牛羊的价格各是多少文钱 39

2.1.13  赔了多少钱 39

2.1.14  海盗如何分金才能让他获得最多的金子 40

2.1.15  张老师的生日是哪一天 41

2.1.16  拿几个乒乓球 41

2.2   逻辑推理 42

2.2.1  怎样才能推理出学生的专业 42

2.2.2  错误的判断是哪一个 43

2.2.3  最后参加紧急项目的开发人是谁 43

2.2.4  猜的第一个数字是多少 44

2.2.5  需要多少只老鼠测试才能判断出毒酒 45

2.2.6  地图重合点有几个 45

2.2.7  掰断多少次金条才能按要求给雇工报酬 46

2.2.8  握手次数是多少 46

2.2.9  如何判断出坏鸡蛋 47

2.3   概率与组合 48

2.3.1  抽球人数是多少 48

2.3.2  案件发生在A区的可能性是多少 48

2.3.3  男女比例将会是多少 49

2.3.4  对称矩阵有多少个 49

2.3.5  AB点有多少种走法 50

2.3.6  多少种排队方式 50

2.3.7  把球放到小桶中有多少种放法 51

2.3.8  正确描述100台虚拟机故障的是哪一个 51

2.3.9  圆桌上一共有多少种坐法 52

2.3.10  兵马俑博物馆可容纳多少人 52

2.3.11  两种策略的预期收益是多少 53

2.3.12  拾起别人帽子的概率是多少 53

2.3.13  合法表达式有多少个 53

2.3.14  JavaC++程序的有多少人 54

2.3.15  乘坐甲车的概率是多少 54

2.3.16  AZ的最短路径数是多少 54

2.3.17  选取红黄白球的概率是多少 55

2.3.18  一共有多少种染色情况 55

2.3.19  肇事车是白车的概率是多少 56

2.3.20  获得冠军的情况有多少种 56

2.3.21  一红一黑的概率是多少 56

2.3.22  谁会赢 57

2.3.23  乘坐不同交通工具的概率是多少 57

2.4   数学计算 58

2.4.1  一共等了女神多少分钟 58

2.4.2  使用了什么进制运算 59

2.4.3  三角形有多少个 59

2.4.4  数列的规律是什么 60

2.4.5  数列使用了什么规律 60

2.4.6  余数是多少 60

2.4.7  如何才能找到最好的羽毛球员工 61

2.4.8  亮着的灯泡有多少个 61

2.4.9  工作时长是多少 62

2.4.10  最小夹角是几度 62

2.4.11  求解到的余数是多少 63

2.4.12  如何正确计算余数 63

2.4.13  最高的效率是多少 63

2.4.14  可以实现的函数是哪个 64

2.4.15  可以兑换多少瓶加多宝 64

2.4.16  共赚了多少钱 64

2.4.17  实际折扣是多少 65

3  排序算法 66

3.1  如何实现冒泡排序 67

3.2  如何实现插入排序 70

3.3  如何实现归并排序 72

3.4  如何实现快速排序 74

3.5  如何实现选择排序 76

3.6  如何细实现希尔排序 79

3.7  如何实现堆排序 80

3.8  如何实现计数排序 82

3.9  如何实现桶排序 83

4  链表 86

4.1  如何实现链表的逆序 87

4.2  如何从无序链表中移除重复项 91

4.3  如何计算两个单链表所代表的数之和 95

4.4  如何对链表进行重新排序 99

4.5  如何找出单链表中的倒数第k个元素 103

4.6  如何检测一个较大的单链表是否有环 109

4.7  如何把链表相邻元素翻转 113

4.8  如何把链表以K个结点为一组进行翻转 116

4.9  如何合并两个有序链表 120

5  栈与队列 124

5.1  如何实现栈 124

5.2  如何实现队列 129

5.3  如何翻转栈的所有元素 133

5.4  如何根据入栈序列判断可能的出栈序列 142

5.5  如何用O(1)的时间复杂度求栈中最小元素 147

5.6  如何用两个栈模拟队列操作 148

6 二叉树 150

6.1  二叉树基础知识 150

6.2  如何实现二叉树 152

6.3  如何用树结构实现多层级分类 158

6.4  如何找到二叉树中的最大最小值 160

6.5  如何对二叉树进行遍历 163

6.6  如何判断一棵二叉树是否是完全二叉树 165

7  数组 169

7.1  如何找出数组中唯一的重复元素 169

7.2  如何查找数组中元素的最大值和最小值 175

7.3  如何找出旋转数组的最小元素 179

7.4  如何找出数组中丢失的数 182

7.5  如何找出数组中出现奇数次的数 184

7.6  如何找出数组中第k小的数 186

7.7  如何求数组中两个元素的最小距离 189

7.8  如何求解最小三元组距离 192

7.9  如何求数组连续最大和 195

7.10  如何求数组中绝对值最小的数 198

7.11  如何找出数组中出现一次的数 201

7.12  如何在不排序的情况下求数组中的中位数 203

7.13  如何求集合的所有子集 205

7.14  如何对数组进行循环移位 207

7.15  如何在有规律的二维数组中进行高效的数据查找 210

7.16  如何寻找最多的覆盖点 211

7.17  如何判断请求能否在给定的存储条件下完成 213

7.18  如何按要求构造新的数组 215

7.19  如何获取最好的矩阵链相乘方法 216

7.20  如何求解迷宫问题 219

7.21  如何从三个有序数组中找出它们的公共元素 221

8  基本数字运算 223

8.1  如何判断一个自然数是否是某个数的二次方 223

8.2  如何判断一个数是否为2n次方 225

8.3  如何不使用除法操作符实现两个正整数的除法 227

8.4  如何只使用++操作符实现加减乘除运算 232

8.5  如何根据已知随机数生成函数计算新的随机数 235

8.6  如何判断1024!末尾有多少个0 236

8.7  如何按要求比较两个数的大小 237

8.8  如何求有序数列的第1500个数的值 238

8.9  如何求二进制数中1的个数 239

8.10  如何计算一个数的n次方 240

8.11  如何在不能使用库函数的条件下计算正数n的算术平方根 242

8.12  如何不使用^操作实现异或运算 243

8.13  如何不使用循环输出1100 244

9  排列组合与概率 246

9.1  如何拿到最多金币 246

9.2  如何求正整数n所有可能的整数组合 247

9.3  如何用一个随机函数得到另外一个随机函数 249

9.4  如何等概率地从大小为n的数组中选取m个整数 250

9.5  组合125这三个数使其和为100的组合个数 251

9.6  如何判断还有几盏灯泡还亮着 253

10   海量数据处理 255

10.1  如何从大量的url中找出相同的url 255

10.2  如何从大量数据中找出高频词 256

10.3  如何找出某一天访问百度网站最多的IP 257

10.4  如何在大量的数据中找出不重复的整数 257

10.5  如何在大量的数据中判断一个数是否存在 258

10.6  如何查询最热门的查询串 258

10.7  如何统计不同电话号码的个数 260

10.8  如何从5亿个数中找出中位数 261

10.9  如何按照query的频度排序 262

 

posted @ 2019-05-24 14:11  琉忆光年  阅读(394)  评论(0编辑  收藏  举报