您的位置:首页 > 职场人生

程序员编程艺术第一~三十七章集锦与总结,及免积分PDF下载

2013-12-14 15:07 579 查看

程序员编程艺术第1~37章集锦与总结,及免积分PDF下载

前言

    熟悉本blog的朋友大都知道,在2010年刚开始写本博客之际,我整理过一个微软面试100题,后来我为这100题开始发帖讨论,写答案上传,至今成了一个系列,即为微软面试100题系列。在整理这个系列的过程当中,越来越强烈的感觉到,可以从那100题中精选一些更为典型的题,每一题详细阐述成章,不断优化,于此,便成了程序员编程艺术系列。

    本编程艺术系列从2011年4月至今,写了37个编程问题,通过整理每一年校招的笔试面试题,我们都能发现,许多笔试面试题都是来自此编程艺术系列,从而发觉绝大部分问题,都是有规律可循的,而且可以不断优化。

    然个人力量有限,故特意把这37个问题集中到一起,你可以做两件事情:

发现本编程艺术系列任何问题、错误、bug,或可以优化的每一段代码,欢迎随时批评指正;
欢迎你也来做做这37题,不看答案,自己写自己的代码,一起刷这37题。你可以直接在本博客上留言show出你的思路和代码,或把37题所有的答案发在github上,或直接整理成一个答案文档发给我,如若同意,把你的答案分享出来。

    愿我们能共同享受编程和思考的乐趣,thanks。

程序员编程艺术第一~三十七章集锦

第一章、左旋转字符串
第1题、定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部,如把字符串abcdef左旋转2位得到字符串cdefab。

请实现字符串左旋转的函数,要求对长度为n的字符串操作的时间复杂度为O(n),空间复杂度为O(1)。 

第二章、字符串是否包含问题
第2题、假设这有一个各种字母组成的字符串A,和另外一个字符串B,字符串里B的字母数相对少一些。什么方法能最快的查出所有小字符串B里的字母在大字符串A里都有?

比如,如果是下面两个字符串:

String 1: ABCDEFGHLMNOPQRS

String 2: DCGSRQPO

答案是true,所有在string2里的字母string1也都有。

  

如果是下面两个字符串:  

String 1: ABCDEFGHLMNOPQRS   

String 2: DCGSRQPZ  

答案是false,因为第二个字符串里的Z字母不在第一个字符串里。

第三章、寻找最小的k个数
第3题、输入n个整数,输出其中最小的k个。例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。

第三章续、Top K算法问题的实现
第3.1题、搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。
    假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。),请你统计最热门的10个查询串,要求使用的内存不能超过1G。

第三章再续:快速选择SELECT算法的深入分析与实现



三之三续、求数组中给定下标区间内的第K小(大)元素
第3.2题、给定数组,给定区间,求第K小的数如何处理?

第四章
4000
、现场编写类似strstr/strcpy/strpbrk的函数

第4题、给定一个字符串A,要求在A中查找一个子串B。如A="ABCDF",要你在A中查找子串B=“CD”,相当于实现strstr库函数。

第五章、寻找满足条件的两个或多个数
第5.1题、输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。

第5.2题、编程求解:输入两个整数
n 和 m,从数列1,2,3.......n 中 随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来。

第六章、求解500万以内的亲和数
第6题、求500万以内的所有亲和数
如果两个数a和b,a的所有真因数之和等于b,b的所有真因数之和等于a,则称a,b是一对亲和数。例如220和284,1184和1210,2620和2924。

第七章、求连续子数组的最大和

第7题、输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。

例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。

第八章、从头至尾漫谈虚函数
第九章、闲话链表追赶问题
第9题、在一条左右水平放置的直线轨道上任选两个点,放置两个机器人,请用如下指令系统为机器人设计控制程序,使这两个机器人能够在直线轨道上相遇。(注意两个机器人用你写的同一个程序来控制)
指令系统:只包含4条指令,向左、向右、条件判定、无条件跳转。其中向左(右)指令每次能控制机器人向左(右)移动一步;条件判定指令能对机器人所在的位置进行条件测试,测试结果是如果对方机器人曾经到过这里就返回true,否则返回false;无条件跳转,类似汇编里面的跳转,可以跳转到任何地方。

第十章、如何给10^7个数据量的磁盘文件排序
第10题、输入:给定一个文件,里面最多含有n个不重复的正整数(也就是说可能含有少于n个不重复正整数),且其中每个数都小于等于n,n=10^7。
输出:得到按从小到大升序排列的包含所有输入的整数的列表。
条件:最多有大约1MB的内存空间可用,但磁盘空间足够。且要求运行时间在5分钟以下,10秒为最佳结果。

第十一章、最长公共子序列(LCS)问题

第11题、什么是最长公共子序列呢?好比一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则S 称为已知序列的最长公共子序列。

举个例子,如:有两条随机序列,如 1 3 4 5 5 ,and 2 4 5 5 7 6,则它们的最长公共子序列便是:4 5 5。

第十二~十五章:数的判断,中签概率,IP访问次数,回文问题(初稿)
第12题、给40亿个不重复的unsignedint的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
第13题、一个文件中含有n个元素,只能遍历一遍,要求等概率随机取出其中之一。
第14题、海量日志数据,提取出某日访问百度次数最多的那个IP。
第15题、判断一个字串是否是回文

第十六~第二十章:全排列/跳台阶/奇偶调序,及一致性hash算法
第16题、输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c
所能排列出来的所有字符串
abc、acb、bac、bca、cab 和cba。
第17题、一个台阶总共有n
级,如果一次可以跳1 级,也可以跳2 级。求总共有多少总跳法,并分析算法的时间复杂度。
第18题、输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。要求时间复杂度为O(n)。
 
  第19题、
在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。

第二十一~二十二章:出现次数超过一半的数字,最短摘要的生成
第21题、数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。
第22题、给定一段产品的英文描述,包含M个英文字母,每个英文单词以空格分隔,无其他标点符号;再给定N个英文单词关键字,请说明思路并编程实现方法

String extractSummary(String description,String[] key words)

目标是找出此产品描述中包含N个关键字(每个关键词至少出现一次)的长度最短的子串,作为产品简介输出。

第二十三、四章:杨氏矩阵查找,倒排索引关键词Hash不重复编码实践
第23题、在一个m行n列二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

例如下面的二维数组就是每行、每列都递增排序。如果在这个数组中查找数字6,则返回true;如果查找数字5,由于数组不含有该数字,则返回false。



第24题、</spa
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐