程序员代码面试指南

左程云
献给左军和谢桂兰 特别说明 1.本书所有题目的代码都为Java实现,但这并不会妨碍其他语言使用者的阅读。这是因为笔者在实现每一道题目时,都尽最大努力回避与Java语言特性相关的写法出现,而且尽量遵循大多数编程语言共有的写法习惯。所以,将本书中的Java实现改写成其他语言的实现是非常容易的。 2.在Java中,如果想得到字符串str第i个位置的字符,需用如下方式: char p=str.charAt(i); 本书提供的函数中有大量参数为字符串类型的函数,但如上所示的方式并不符合大多数读者的阅读习惯。为了让代码更加易读,笔者都在这样的函数中把字符串类型的参数转换成char类型数组的变量来使用,例如: char[]charArr=str.toCharArray(); 此时得到字符串str第i个位置的字符,可以用如下方式: char p=charArr[i]; 在本书中,发生如上转换行为的函数在估算额外空间复杂度的时候,笔者并没有把charArr的空间计算在内,这是因为如果不转换成char数组,而是选择直接使用原参数str,也是完全可以的,之所以选择转换,仅仅是为了让读者更容易读懂代码;是否进行转换对算法的逻辑没有任何影响,所以不把charArr的空间算作必须使用的额外空间。 另外,本书涉及的程序源代码可以在http://www.broadview.com.cn/27011中下载。 推荐序1 2015年春节,因为公司业务的快速发展,我们开始寻觅优秀的笔试面试算法讲师。几经周折,找到了当时在举办线下算法分享的程云,认认真真地听他讲了一堂课,当时就认定他就是我们要找的人。 我听过很多国内顶尖ACM选手的算法分享,但是每一次听完以后总觉得我和那些人永远隔着一个断裂带,算法对我来说遥不可及,而程云讲解算法的时候总能从最小的切口讲起,由浅入深,环环相扣,不知不觉引你走向算法的核心精…