算法是你的软肋?来看看算法大神左程云“旷世之作”程序员代码面试指南第2版文档

前言

对工程师而言,算法既是基础能力,也是进阶突破的必备能力。

本文内容深入浅出,不仅涉及算法知识本身,更能让读者解决问题的思维升级。不论是面试准备,还是日常学习,本文都可以成为你进入算法世界的不二选择。

相比在网上泛泛地刷题,本文更强调最优解和举一反三的能力。对算法原型的介绍也能帮助程序员更高效地准备面试与提升自己,以及在不断变化的题目中迅速找到思路。

也是程序员求职或跳槽刷题人的优选之作!作者用丰富的工作经验和对算法的深刻理解,通过精辟的示例,把代码面试题目最优解解释得简明和“平易近人”。

本文中,作者通过自己对常见算法知识的理解,精心选择了一道道真实的高频面试题,循序渐进地提升题目难度,辅以翔实的解题思路,让读者真正学得到内容,并学得下去。

本文将从目录、主要内容、专家大牛对本文的评价、相比第1版有哪些改进四部分给大家介绍,希望大家能够把里面的内容全部掌握,并且能够学以致用,也希望能够得到大家的喜欢!

算法是你的软肋?来看看算法大神左程云“旷世之作”程序员代码面试指南第2版文档_第1张图片

 

目录

算法是你的软肋?来看看算法大神左程云“旷世之作”程序员代码面试指南第2版文档_第2张图片

 

算法是你的软肋?来看看算法大神左程云“旷世之作”程序员代码面试指南第2版文档_第3张图片

 

算法是你的软肋?来看看算法大神左程云“旷世之作”程序员代码面试指南第2版文档_第4张图片

 

算法是你的软肋?来看看算法大神左程云“旷世之作”程序员代码面试指南第2版文档_第5张图片

 

算法是你的软肋?来看看算法大神左程云“旷世之作”程序员代码面试指南第2版文档_第6张图片

 

算法是你的软肋?来看看算法大神左程云“旷世之作”程序员代码面试指南第2版文档_第7张图片

 

主要内容

本文是程序员代码面试宝典!文中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现。

第1章栈和队列,设计一个有getMin功能的栈

由两个栈组成的队列

如何仅用递归函数和栈操作逆序一个栈

猫狗队列

用一个栈实现另一个栈的排序

用栈来求解汉诺塔问题

生成窗口最大值数组

单调栈结构

求最大子矩阵的大小

最大值减去最小值小于或等于num的子数组数量

可见的山峰对数量

算法是你的软肋?来看看算法大神左程云“旷世之作”程序员代码面试指南第2版文档_第8张图片

 

第2章链表问题,

打印两个有序链表的公共部分

在单链表和双链表中删除倒数第K个节点

删除链表的中间节点和a/b处的节点

反转单向和双向链表

反转部分单向链表

环形单链表的约瑟夫问题

判断一个链表是否为回文结构(普通解法 进阶解法尉)

将单向链表按某值划分成左边小、中间相等、右边大的形式

复制含有随机指针节点的链表

两个单链表生成相加链表

两个单链表相交的一系列问题

将单链表的每K个节点之间逆序

删除无序单链表中值重复出现的节点

在单链表中删除指定值的节点

将搜索二叉树转换成双向链表

单链表的选择排序

一种怪异的节点删除方式

向有序的环形单链表中插入新节点

合并两个有序的单链表

按照左右半区的方式重新组合单链表

算法是你的软肋?来看看算法大神左程云“旷世之作”程序员代码面试指南第2版文档_第9张图片

 

第3章二叉树问题,

分别用递归和非递归方式实现二叉树先序、中序和后序遍历

打印二叉树的边界节点

如何较为直观地打印二叉树

二叉树的序列化和反序列化

遍历二叉树的神级方法

在二叉树中找到累加和为指定值的最长路径长度

找到二叉树中的最大搜索二叉子树

找到二叉树中符合搜索二叉树条件的最大拓扑结构

二叉树的按层打印与ZigZag打印

调整搜索二叉树中两个错误的节点

判断t1树是否包含t2树全部的拓扑结构

判断t1树中是否有与t2树拓扑结构完全相同的子树

判断二叉树是否为平衡二叉树

根据后序数组重建搜索二叉树

判断- -棵二叉树是否为搜索二叉树和完全二叉树

通过有序数组生成平衡搜索二叉树

在二叉树中找到一个节点的后继节点

在二叉树中找到两个节点的最近公共祖先

Tarjan算法与并查集解决二叉树节点间最近公共祖先的批量查询问题

二叉树节点间的最大距离问题

派对的最大快乐值

通过先序和中序数组生成后序数组

统计和生成所有不同的二叉树

统计完全二叉树的节点数

算法是你的软肋?来看看算法大神左程云“旷世之作”程序员代码面试指南第2版文档_第10张图片

 

第4章递归和动态规划,斐波那契数列问题的递归和动态规划

矩阵的最小路径和

换钱的最少货币数

机器人达到指定位置方法数

换钱的方法数

打气球的最大分数

最长递增子序列

信封嵌套问题

汉诺塔问题

最长公共子序列问题

最长公共子串问题

子数组异或和为0的最多划分

最小编辑代价

字符串的交错组成

龙与地下城游戏问题

数字字符串转换为字母组合的种数

表达式得到期望结果的组成种数

排成一条线的纸牌博弈问题

跳跃游戏

数组中的最长连续序列

N皇后问题

算法是你的软肋?来看看算法大神左程云“旷世之作”程序员代码面试指南第2版文档_第11张图片

 

第5章字符串问题.判断两个字符串是否互为变形词;

判断两个字符串是否互为旋转词

将整数字符串转成整数值

字符串的统计字符串

判断字符数组中是否所有的字符都只出现过一- 次

在有序但含有空的数组中查找字符串

字符串的调整与替换

翻转字符串

完美洗牌问题

删除多余字符得到字典序最小的字符串

数组中两个字符串的最小距离

字符串的转换路径问题

添加最少字符使字符串整体都是回文字符串

括号字符串的有效性和最长有效长度

公式字符串求值

0左边必有1的二进制字符串数量

拼接所有字符串产生字典顺序最小的大写字符串

找到字符串的最长无重复字符子串

找到指定的新类型字符

旋变字符串问题

最小包含子串的长度

回文最少分割数

字符串匹配问题

字典树(前缀树)的实现

子数组的最大异或和

算法是你的软肋?来看看算法大神左程云“旷世之作”程序员代码面试指南第2版文档_第12张图片

 

第6章大数据和空间限制,认识布隆过滤器

只用2GB内存在20亿个整数中找到出现次数最多的数

40亿个非负整数中找到未出现的数

找到100亿个URL中重复的URL及搜索词汇的TopK问题

40亿个非负整数中找到出现两次的数和所有数的中位数

一致性哈希算法的基本原理

岛问题

算法是你的软肋?来看看算法大神左程云“旷世之作”程序员代码面试指南第2版文档_第13张图片

 

第7章位运算,不用额外变量交换两个整数的值

不用做任何比较判断找出两个数中较大的数

只用位运算不用算术运算实现整数的加减乘除运算

整数的二进制数表达中有多少个1

在其他数都出现偶数次的数组中找到出现奇数次的数

在其他数都出现k次的数组中找到只出现一次的数

算法是你的软肋?来看看算法大神左程云“旷世之作”程序员代码面试指南第2版文档_第14张图片

 

第8章数组和矩阵问题,转圈打印矩阵

将正方形矩阵顺时针转动90°

“之”字形打印矩阵

找到无序数组中最小的k个数

需要排序的最短子数组长度

在数组中找到出现次数大于N/K的数

在行列都排好序的矩阵中找指定数

最长的可整合子数组的长度

不重复打印排序数组中相加和为给定值的所有二元组和三元组

未排序正数数组中累加和为给定值的最长子数组长度

未排序数组中累加和为给定值的最长子数组系列问题

未排序数组中累加和小于或等于给定值的最长子数组长度

计算数组的小和

自然数数组的排序

奇数下标都是奇数或者偶数下标都是偶数

子数组的最大累加和问题

子矩阵的最大累加和问题

在数组中找到一一个局部最小的位置

数组中子数组的最大累乘积

打印N个数组整体最大的TopK

边界都是1的最大正方形大小

不包含本位置值的累乘数组

数组的partition 调整

求最短通路值

数组中未出现的最小正整数

数组排序之后相邻数的最大差

做项目的最大收益问题

分金条的最小花费

大楼轮廓问题

加油站良好出发点问题

容器盛水问题

算法是你的软肋?来看看算法大神左程云“旷世之作”程序员代码面试指南第2版文档_第15张图片

 

第9章其他题目,从5随机到7随机及其扩展,(原问题尉,补充问题,进阶问题

一行代码求两个数的最大公约数

有关阶乘的两个问题

判断一个点是否在矩形内部

判断一个点是否在三角形内部

折纸问题

能否完美地拼成矩形

蓄水池算法

设计有setAll功能的哈希表

最大的leftMax与rightMax 之差的绝对值

设计LRU缓存结构

LFU缓存结构设计

设计RandomPool结构

并查集的实现

调整[0,x)区间上的数出现的概率

路径数组变为统计数组

正数数组的最小不可组成和

累加出整个范围所有的数最少还需几个数

一种字符串和数字的对应关系

1到n中 1出现的次数

从N个数中等概率打印M个数

判断一个数是否是回文数

在有序旋转数组中找到最小值

在有序旋转数组中找到一个数

数字的英文表达和中文表达

分糖果问题

一种消息接收并打印的结构设计

随时找到数据流的中位数

在两个长度相等的排序数组中找到上中位数

在两个排序数组中找到第k小的数

两个有序数组间相加和的Topk问题

出现次数的Topk问题

Manacher算法

KMP算法

丢棋子问题

画匠问题

邮局选址问题

算法是你的软肋?来看看算法大神左程云“旷世之作”程序员代码面试指南第2版文档_第16张图片

 

这份【程序员代码面试指南: IT 名企算法与数据结构题目最优解(第2版)】共有578页,需要完整版的朋友,可以一键三连之后添加上小助手来获取!!

算法是你的软肋?来看看算法大神左程云“旷世之作”程序员代码面试指南第2版文档_第17张图片

总结

一、来看一下大牛对本文的高度评价!

算法是你的软肋?来看看算法大神左程云“旷世之作”程序员代码面试指南第2版文档_第18张图片

 

二、相比第一版的内容,第2版有什么新的内容增加或者修改呢?

1.修改了第1版部分题目的解释,并增加了更多示例。

2.增加了很多近年来新出现的流行面试题,删掉了已经很少出现的低频面试题。

3.把经常出现的解题套路与算法原型做了结构化的调整和总结。

4.本文所有题目的代码都用Java语言实现,但这并不会妨碍其他语言使用者的阅读。

这是因为笔者尽最大努力回避了与Java语言特性相关的代码实现,而且尽量遵循大多数编程语言共有的写法习惯。因此,将本书中的Java语言实现改写成其他语言的实现是非常容易的。

5.在Java语言中,如果想得到字符串str第i个位置的字符,则需用如下方式:

char p = str.charAt(i);

本文提供的函数中有大量参数为字符串类型的函数,但如上所示的方式并不符合大多数读者的阅读习惯。为了让代码更加易读,笔者在这些函数中把字符串类型的参数转换成char类型数组的变量来使用。例如:

char] charArr = str.toCharArray();

此时得到字符串str第i个位置的字符,可以用如下方式:

char p = charArr[i];

在本文中,发生如上转换行为的函数在估算额外空间复杂度时,笔者并没有把charArr的空间计算在内,这是因为如果不转换成char数组,而是选择直接使用原参数str,也是完全可以的,之所以选择转换,仅仅是为了让读者更容易读懂代码;是否进行转换对算法的逻辑没有任何影响,所以不把charArr的空间算作必须使用的额外空间。

你可能感兴趣的:(字符串,链表,算法,java,python)