
----程序员面试金典
该栏目为程序员面试宝典书上内容分享
互联网极客
执行力+团队合作+思考力=成功
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
程序员面试金典1.1:确定字符串的所有字符是否全都不同
1.1 实现一个算法,确定一个字符串的所有字符是否全都不同。假设不允许使用额外的数据结构,又该如何处理? 解法: 一开始,不妨先问问面试官,上面的字符串是ASCII字符串还是Unicode字符串。这很重要,问这个 问题表明你关注细节,并且对计算机科学有深刻的了解。 为了简单起见,这里假设字符集为ASCII。若不是的话需要扩大存储空间,不过其余逻辑没有分别。 假设字符集为ASCII,对于这个原创 2015-08-25 21:14:12 · 2152 阅读 · 0 评论 -
程序员面试金典1.3: 确定两个字符串中一个重排后,能否变成另一个字符串
解法: 跟其他问题一样,首先我们应该向面试官确认一些细节,弄清楚变位词比较是否区分大小写。比如,God是否为dog的变位词?此外,我们还应该问清楚是否要考虑空白的字符。 这里假定变位词比较区分大小写,空白也要考虑在内。也就是说“god "不是”dog"的变位词。 比较两个字符串时,只要两者长度不同,就不可能是变位词。 解决这个问题有两个解决方法,并且都采用了上述优化,即先比较字符串的长度原创 2015-08-26 22:36:28 · 1439 阅读 · 0 评论 -
程序员面试金典1.5:实现字符串的压缩功能
1.5:利用字符重复出现的次数,编写一个方法,实现基本的字符串的压缩功能。比如,字符串“aabcccccaaa"会变成”a2b1c5a3",若压缩后的字符串没有变短,则返回原先的字符串。 解法 咋一看,编写这个方法似乎相当简单,实则有点复杂。我们会迭代访问字符串,将字符拷贝至新的字符串,并数出重复的字符。 下面是Java的实现代码: public String compress(Strin原创 2015-08-29 10:39:56 · 1227 阅读 · 1 评论 -
程序员面试金典2.1:编写代码,移除未排序的链表中的重复节点
2.1编写代码,移除未排序的链表中的重复节点 解法一:如果不得使用临时缓冲区,该怎么解决? 要想移除链表中的重复节点,我们需要设法记录有哪些是重复的。这里只需要使用到一个简单的散列表。 在下面的解法中,我们会直接迭代访问整个链表,将每个节点加入到散列表。若发现有重复的元素,将该节点从链表中移除,然后继续迭代。这个题目使用了链表,因此只需要扫描一次就能搞定。/** * */ packag原创 2015-08-30 10:22:22 · 1148 阅读 · 0 评论 -
程序员面试金典1.8:判断翻转子串
1.8:假定有一个方法isSubstring,可检查一个单词是否为其他字符串的子串。给定两个字符串s1,s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次isSubstring 比如waterbottle是erbottlewat旋转后的字符串 解法: 假定s2由s1旋转而成,那么,我们就可以找出旋转点在哪,例如,若以wat对waterbottle旋转,就会得到erbottlewat原创 2015-08-29 14:55:59 · 1235 阅读 · 0 评论 -
程序员面试金典1.7:若M*N矩阵中某个元素为0,则将其所在的行与列清零
1.7:编写一个算法,若M*N矩阵中某个元素为0,则将其所在的行与列清零。 咋一看,这个问题很简单:直接遍历整个矩阵,只要发现值为0的元素,就将其所在的行与列清零。不过这种方法有个缺陷:在读取被清零的行与列时,读到的尽是零,于是所在的行与所在的列都变成了0,很快,整个矩阵都变成了0. 避开这个缺陷的方法之一是新建一个矩阵标记零元素的位置。然后,在第二遍遍历矩阵的时候将0元素所在的行与列清零。这原创 2015-08-29 14:25:31 · 3731 阅读 · 0 评论 -
程序员面试金典1.6:将图像旋转90度。不占用额外内存空间
1.6 给定一副由N*N矩阵表示的图像,其中每个像素的大小为4字节,编写一个方法,将图像旋转90度。不占用额外的内存空间,能够做到? 解法: 要将矩阵旋转90度,最简单的做法就是一层一层进行旋转。对每一层指向环状旋转,将上边移到右边,右边移到下边,下边移到左边,左边移到上边。那么,该如何交换这四条边?一种做法是把上面复制到一个数组中,然后将左边移到上边,下边移到左边,等等。这需要占用O(n)的原创 2015-08-29 13:07:33 · 1412 阅读 · 0 评论 -
程序员面试金典2.4:给定值x为基准将链表分割成两部分
2.4:编写代码,以给定值x为基准将链表分割称两部分,所有小于x的节点排在所有大于或等于x的节点之前; 解法: 要是链表换成数组,搬移元素时就要特别小心,因为搬移数组的开销很大。 不过,移动链表的元素则要容易许多。我们不必移动和交换元素,可以直接创建两个链表:一个链表存放在小于x的元素,另一个链表存放大于或等于x的元素。 我们会迭代访问整个链表,将元素插入before或after链表。一旦原创 2015-09-02 14:54:17 · 1785 阅读 · 0 评论