新書推薦:
《
宠物革命:动物与现代英国生活的形成
》
售價:NT$
360.0
《
(棱镜精装人文译丛)蔑视大众:现代社会文化斗争的实验
》
售價:NT$
275.0
《
皇家宫廷中的保健秘方 中小学课外阅读
》
售價:NT$
290.0
《
《诗经》十五讲 十五堂《诗经》历史文化与文学课 丹曾人文通识丛书
》
售價:NT$
395.0
《
述异记汇笺及情节单元分类研究(上下册)
》
售價:NT$
475.0
《
环境、社会、治理(ESG)信息披露操作手册
》
售價:NT$
1190.0
《
桑德拉销售原则 伍杰 [美]大卫·马特森
》
售價:NT$
440.0
《
理论的意义
》
售價:NT$
340.0
|
編輯推薦: |
以应该广泛的C语言为编写对象,真题库2020年全面更新,作者就职世界500强IT名企,培训经验丰富
C程序开发相关领域面试、笔试、经验心得、算法、考点、难点、真题解析一应俱全,获取高薪必备
|
內容簡介: |
《C#程序员面试算法宝典》是一本讲解程序员面试笔试算法的书籍,代码采用C#语言进行编写,在写法上,除了讲解如何解答算法问题以外,还引入了实例辅以说明,让读者能够更加容易地理解。
《C#程序员面试算法宝典》将程序员面试笔试过程中典型算法类真题尽收囊中,在题目的广度上,通过各种渠道,搜集了近3年来几乎所有IT企业面试笔试算法高频题目,所选择题目均为企业招聘使用的真题。在题目的深度上,本书由浅入深,细致地分析每一个题目,并提炼归纳。本书结构合理,条理清晰,对于读者进行学习与检索意义重大。
《C#程序员面试算法宝典》可作为计算机相关专业毕业生面试笔试的求职用书,也可以作为本科生、研究生学习数据结构与算法的辅导书籍,同时也适合期望在计算机软硬件行业大显身手的计算机爱好者阅读。
|
關於作者: |
赵大有,北京邮电大学软件工程硕士,曾负责国家211重点大学海量资源储存,搭建了大型分布式存储系统,现就职于途家网负责高并发库存、产品体系搭建与维护、复杂业务服务体系系统的搭建与维护工作,对.Net、Java有深刻认识,善于组织协调解决问题,具有丰富的项目经验。作者公众号:dayousay
|
目錄:
|
前言
面试笔试经验技巧篇
经验技巧1 如何巧妙地回答面试官的问题2
经验技巧2 如何回答技术性的问题3
经验技巧3 如何回答非技术性问题5
经验技巧4 如何回答快速估算类问题5
经验技巧5 如何回答算法设计问题6
经验技巧6 如何回答系统设计题9
经验技巧7 如何解决求职中的时间冲突问题11
经验技巧8 如果面试问题曾经遇见过,是否要告知12
经验技巧9 被企业拒绝后是否可以再申请13
经验技巧10 如何应对自己不会回答的问题13
经验技巧11 如何应对面试官的激将法语言14
经验技巧12 如何处理与面试官持不同观点的问题15
经验技巧13 什么是职场暗语15
面试笔试真题解析篇
第1章 链表21
1.1 如何实现链表的逆序22
1.2 如何从无序链表中移除重复项26
1.3 如何计算两个单链表所代表的数之和30
1.4 如何对链表进行重新排序33
1.5 如何找出单链表中的倒数第k个元素36
1.6 如何检测一个较大的单链表是否有环40
1.7 如何把链表相邻元素翻转43
1.8 如何把链表以k个结点为一组进行翻转45
1.9 如何合并两个有序链表48
1.10 如何在只给定单链表中某个结点的指针的情况下删除该结点51
1.11 如何判断两个单链表(无环)是否交叉53
第2章 栈与队列57
2.1 如何实现栈57
2.2 如何实现队列62
2.3 如何翻转栈的所有元素68
2.4 如何根据入栈序列判断可能的出栈序列72
2.5 如何用O1的时间复杂度求栈中最小元素74
2.6 如何用两个栈模拟队列操作76
2.7 如何设计一个排序系统77
2.8 如何实现LRU缓存方案79
2.9 如何从给定的车票中找出旅程的路线81
2.10 如何从数组中找出满足a b=c d的两个数对83
第3章 二叉树86
3.1 二叉树基础知识86
3.2 如何把一个有序整数数组放到二叉树中88
3.3 如何从顶部开始逐层遍历二叉树结点数据90
3.4 如何求一棵二叉树的最大子树的和92
3.5 如何判断两棵二叉树是否相等94
3.6 如何把二叉树转换为双向链表95
3.7 如何判断一个数组是否是二元查找树后序遍历的序列97
3.8 如何找出排序二叉树上任意两个结点的最近共同父结点99
3.9 如何复制二叉树105
3.10 如何在二叉树中找出与输入整数相等的所有路径106
3.11 如何对二叉树进行镜像反转108
3.12 如何在二叉排序树中找出第一个大于中间值的结点110
3.13 如何在二叉树中找出路径最大的和113
3.14 如何实现反向DNS查找缓存115
第4章 数组119
4.1 如何找出数组中唯一的重复元素119
4.2 如何查找数组中元素的最大值和最小值126
4.3 如何找出旋转数组的最小元素130
4.4 如何找出数组中出现奇数次的数133
4.5 如何找出数组中第k小的数136
4.6 如何求数组中两个元素的最小距离140
4.7 如何求解最小三元组距离142
4.8 如何求数组中绝对值最小的数147
4.9 如何求数组连续最大和151
4.10 如何找出数组中出现1次的数155
4.11 如何在不排序的情况下求数组中的中位数158
4.12 如何求集合的所有子集159
4.13 如何对数组进行循环移位163
4.14 如何求解迷宫问题166
4.15 如何求解数组分为和相等的m份后m最大值问题168
4.16 如何求一个数组的最长递减子序列170
4.17 如何求解和为n的连续正数序列173
4.18 如何寻找丑数175
4.19 如何找到数组元素连接起来排成的所有数字中最小的一个178
4.20 如何找出数组中出现次数超过了一半的那个数字179
4.21 如何找出数组中左边的数都小于等于它,右边的数都大于等于它的数180
4.22 如何进行大整数相乘182
4.23 如何求集合的所有子集184
4.24 如何知道拿走了哪个数186
4.25 如何求解n-m问题187
4.26 如何求2个有序数组合并后的中位数188
4.27 如何找出n个整数中最小的k个数190
4.28 如何求解数组中逆序对的个数192
4.29 如何找出数组的峰值194
4.30 如何找出数组中的乘积最大子序列195
4.31 如何对数组进行旋转196
4.32 如何求数组的最大子数组差199
4.33 如何统计比给定整数小的数的个数201
4.34 如何进行摇摆排序203
4.35 如何求解数组排序前后最大的间隔204
4.36 如何找出和最接近0的子数组206
4.37 如何找出数组中和为指定值的四元组208
4.38 如何计算买股票的最佳时间210
4.39 如何确定出发加油站问题211
第5章 字符串213
5.1 如何求一个字符串的所有排列213
5.2 如何求两个字符串的最长公共子串219
5.3 如何判断两个字符串是否为换位字符串222
5.4 如何判断两个字符串的包含关系224
5.5 如何对由大小写字母组成的字符数组排序227
5.6 如何消除字符串的内嵌括号228
5.7 如何判断字符串是否是整数229
5.8 如何实现字符串的匹配232
5.9 如何求字符串的编辑距离236
5.10 如何查找到达目标词的最短链长度238
5.11 如何左旋转字符串241
5.12 如何在一个字符串中找到第一个只出现一次的字符242
5.13 如何找出字符串中连续最长的数字串243
5.14 如何进行字符串的串联244
5.15 如何从一个字符串中删除另一个字符串的所有的字符246
5.16 如何判断字符串A中是否包含由字符串B中字
|
內容試閱:
|
计算机技术博大精深,日新月异,Hadoop、GPU计算、移动互联网、模式匹配、图像识别、神经网络、蚁群算法、大数据、机器学习、人工智能、深度学习等新技术让人眼花缭乱,稍有迟疑,就会被时代所抛弃。很多IT从业者非常困惑,不知道从何学起,到底什么才是计算机技术的基石。其实,其本质还是最基础的数据结构与算法知识:Hash、动态规划、分治、排序、查找等。所以,无论是世界级的大型企业还是几个人的小公司,在面试求职者的时候,往往会考查这些最基础的知识,无论你的研究方向是什么,这些基础知识还是应该熟练掌握的。
本书正是从这些基础知识点出发,讲解了求职过程中常见的数据结构与算法的真题,从而让求职者能轻松应付算法类的笔试面试题目。在写作风格上,推陈出新,对于算法的讲解,不仅使用图文并茂的方式,而且还辅以示例的讲解,目的就是为了使讲解更容易读懂。为了能够写出精品书籍,我们对每一个技术问题,都反复推敲,与算法大牛一起反复论证可行性,咬文嚼字,字斟句酌,所有这些付出,只为让读者能够在读完本书后有所收获。
虽然市面上同类型书籍很多,也都写得不错,但是,我们相信,我们能够写出更符合读者需求的高质量精品书籍。为了能够在有限的篇幅里面尽可能地展现干货,我们在题目的选择上下了很大功夫:首先,通过收集近3年以来IT企业的面试笔试算法真题,包括已经出版的相关著作、技术博客、在线编码平台、刷题网站等,保证所选样本足够大。其次,我们选择题目的时候,尽可能不选择一眼就能知道结果的简单题,也没有选择那种怪题、偏题和很难的题,我们原则是选择难度适中或者看上去简单但实际容易出错的题。通过我们的努力,力求所选出来的算法真题能够最大限度地帮助读者。在真题的解析上,我们采用层层递进的写法,先易后难,层层深入,将问题抽丝剥茧,使得读者能够跟随我们的思路,一步步找到问题的最优解。
写作的过程是一个自我认识、自我提高的过程。很多知识,只有深入理解与剖析后,才能领悟其中的精髓,掌握其中的技巧,程序员求职算法也不例外。本书不仅具备了同类书籍分析透彻,代码清晰合理的优点,还具备以下几个方面的优势:
第一,本套书籍分多种语言版本:CC 、Java、C#、Python、PHP、Javascript、Kotlin、Go等,不管读者侧重于哪一种语言,都能够有适合自己的书。本书中如果没有特别强调,代码实现均默认使用C#语言。
第二,每个题目除了循序渐进的分析以外,还对方法进行了详细阐述,针对不同方法的时间复杂度与空间复杂度,都进行了详细分析,除此之外,为了更具说服力,每一种方法几乎都对应有示例讲解辅以说明,对方法是一种更好的辅助讲解。
第三,代码较为规范,完全参照华为公司的编程规范等进行规范编码。小作坊编码的时代早已过去,程序员要想在一个团队中大展拳脚,就离不开合作,而合作的基础就是共同遵循统一的编码规范。不仅如此,规范化的编码往往还有助于读者理解代码。
第四,除了对题目的讲解,还有部分触类旁通的题目供读者练习。本书不可能将所有的程序员求职类的数据结构与算法类题目囊括,但是,本书会尽可能地将一些常见的求职类算法题、具有代表性的算法题重点讲解,将其他一些题目以练习题的形式展现在读者面前,以供读者思考与学习。
本书的出版得到了机械工业出版社的大力支持与配合。书中有部分思想来源于网络上的无名英雄,无法追踪到最原始的出处,在此对这些幕后英雄致以最崇高的敬意。没有学不好的学生,只有教不好的老师,我们希望无论是什么层次的读者,都能毫无障碍地看懂书中所讲内容。书中不足之处在所难免,读者存在求职困惑或是对本书中的内容存在异议,都可以通过邮件(yuancoder@foxmail.com)联系作者。希望读者能够将这些问题反馈到我们这里,以便于未来继续改进与提高,为读者提供更加优秀的作品。
猿媛之家
|
|