第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的空间算作必须使用的额外空间。