
面试编程题库
文章平均质量分 61
mishidemudong
菜鸟上路,一颗红心,两手准备。
展开
-
求二叉树的宽度(结点的最大距离)
如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义“距离”为两个节点之间边的个数。 写一个程序求一颗二叉树中相距最远的两个节点之间的距离。如图3-11所示,粗箭头的边表示最长距离: 分析与解法我们先画几个不同形状的二叉树,(如图3-12所示),看看能否得到一些启示。从例子中可以看出,相距最远的两个节点,一定是两个转载 2015-09-16 23:04:00 · 1071 阅读 · 0 评论 -
面试金典之(一)找出和为SUM的递增数组array中的两个数使之乘积最小
class Solution {public: vector FindNumbersWithSum(vector array, int sum) { vectorres; int temp = 0; int i = 0, j = array.size() - 1; while (i < j&&temp!=sum) { temp = array[i] + array原创 2015-09-09 16:25:28 · 691 阅读 · 0 评论 -
字符串去除多余空格
给定字符串(ASCII码0-255)数组,请在不开辟额外空间的情况下删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。例如:" i am a little boy. ",变成"i am a little boy",语言不限,但不要用伪代码作答,函数输入输出请参考如下的函数原型:123C++函数原原创 2015-08-13 16:32:58 · 4755 阅读 · 0 评论 -
字符串中第一次只出现一次的字符(×60内推笔试)
这是×60的内涂笔试的一个编程题,题意已经很清楚了,主要考察的是是格式的输入,以及基础编程的能力。算法部分,就是用的hash映射法,把字符串中的字符全部映射到一个HASH[256]的数组当中,然后统计所有字符出现的次数,第一次只出现一次的字符,也好比不重复出现的字符,说法不一样而已。下面分享下程序:考点:一字符串的创建,多个字符串数组的创建。二:格式输入要满足要求,用getline(cin,s原创 2015-08-12 10:07:44 · 487 阅读 · 0 评论 -
两道笔试编程题(求水仙数和求平方根数组之和)
第一道是求水仙数的问题,在规定范围内,求得;这道题目还有要求输入测试用例时的格式,一组两对的输入格式。另外一个考点是求一个数的每一位;详细见代码:// shuixianhuashu.cpp : 定义控制台应用程序的入口点。/* 题目是求特定范围内的水仙数,例如100<=m<=n<=999 @midhidemudong @2015-8-10-21:24*///#include原创 2015-08-10 21:45:15 · 917 阅读 · 0 评论 -
HTTP协议--处理状态和返回状态码含义
HTTP 处理状态。当一个XMLHttpRequest初次创建时,这个属性(readystate)的值从0开始,直到接收到完整的HTTP响应,这个值增加到 4。5个状态中每一个都有一个相关联的非正式的名称,下表列出了状态、名称和含义:状态 名称 描述0 Uninitialized 初始化状态。XMLHttpRequest 对象已创建或已被 ab转载 2015-08-02 22:17:35 · 623 阅读 · 0 评论 -
现场手写编程strstr/strcpy
第一节、字符串查找题目描述:给定一个字符串A,要求在A中查找一个子串B。如A="ABCDF",要你在A中查找子串B=“CD”。比较简单,相当于实现strstr库函数,参考代码如下:int strstr(char *string, char *substring){ if (string == NULL || substring == NULL) return -1;原创 2015-07-29 21:27:07 · 3265 阅读 · 0 评论 -
KMP算法通俗解释
1. 首先,字符串"BBC ABCDAB ABCDABCDABDE"的第一个字符与搜索词"ABCDABD"的第一个字符,进行比较。因为B与A不匹配,所以搜索词后移一位。 2. 因为B与A不匹配,搜索词再往后移。 3. 就这样,直到字符串有一个字符,与搜索词的第一个字符相同为止。 4. 接着比较字符原创 2015-07-28 11:25:04 · 599 阅读 · 0 评论 -
快排函数Patiton来求解第K大的数
利用快速排序的特点:第一遍排序会确定一个数的位置,这个数左边都比它大,右边都比他小(降序),当左边区间大于K时,说明我们求的第K大数在左边区间,这时我们可以舍弃右边区间,将范围缩小到左边区间从而重复上述过程,直到确定一个数的位置时,左边区间的小是K-1那么这个数字就是我们所求。用于快速排序升序时,是使得左边的数都比pivot小,右边的数都比pivot数大。区别只在于左右查找时的条件。下面贴原创 2015-07-26 16:31:24 · 744 阅读 · 0 评论 -
求两个升序序列的中位数
这里涉及到数据结构中顺序表的实现、删除、插入、查找等知识,请查看:数据结构 -> 线性表问题描述:一个长度为L (L>=1)的升序序列S,处在第[L/2]个位置的数称为S的中位数。例如,若序列S1=(11, 13, 15, 17, 19),则S1的中位数是15,两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若S2= (2, 4,6,8, 20),则S1和S2的中位数是11。原创 2015-07-24 11:16:04 · 6266 阅读 · 4 评论 -
第一个只出现一次的字符
这个题目可以看做是一类题型。就是从一个数组中找出不重复的第一个或是全部的数,或是在一个字符串当中找。另外还可以做成大数据的情况,例如,给你一亿或是几亿个数,32位的int类型,让你找出所有的不重复的数。基本思路有几个,第一个推荐的方法是位图BitMap,哈希表Hashtable。第二个方法是异或法,此方法在剑指offer中有介绍。下面详细来分析如何解决此类问题。HashTable法对于原创 2015-07-24 09:37:23 · 630 阅读 · 0 评论 -
十五道海量数据处理面试题
转载于研究者July,谢谢他的分享~ 以供查询第一部分、十五道海量数据处理面试题1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url? 方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。遍历文件a,对每个转载 2015-07-21 16:02:10 · 455 阅读 · 0 评论 -
大端模式和小端模式
1. 什么是大端,什么是小端:所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。2.为什么会有大小端:为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了原创 2015-07-21 11:24:45 · 450 阅读 · 0 评论 -
查找第一个只出现一次的字符
这类题目用到的思想就是就用哈希表,这样把字符串对应到一个数组,hashtable中。因为全部的字符总共有256个,因此建立一个hashtable[256]。算法的过程是这样的,首先遍历一遍字符串,根据字符的值来使得hashtable[字符]做统计,此字符出现一次,那么对应的数组元素加一。此时时间复杂度O(logn)。统计完各个字符出现的次数之后,找出次数为一的即可。时间复杂度O(logn)。所原创 2015-07-09 16:29:15 · 793 阅读 · 0 评论 -
寻找两个数的和为定值的算法
题目:输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。直接穷举,从数组中任意选取两个数,判定它们的和是否为输入的那个数字。此举复杂度为O(N^2)。很显然,我们要寻找效率更高的解法。题转载 2015-07-06 23:00:41 · 1162 阅读 · 0 评论 -
python相关面试题
1. Python是如何进行内存管理的?答:从三个方面来说,一对象的引用计数机制,二垃圾回收机制,三内存池机制一、对象的引用计数机制python内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用计数。引用计数增加的情况:1,一个对象分配一个新名称2,将其放入一个容器中(如列表、元组或字典)引用计数减少的情况:1,使转载 2015-06-22 22:40:34 · 1205 阅读 · 1 评论 -
抽签问题或是超几何概率
在一个冒险游戏里,你见到一个宝箱,身上有N把钥匙,其中一把可以打开宝箱,加入没有任何提示,随机尝试,问:(1) 恰好第k次(1=(2) 平均需要尝试多少次?本题中最大的焦点在于问题(1),网上给出了两种互相矛盾的结果 1/N 和 (((N-1)/N)^(K-1))*(1/N). 经过仔细推敲,发现了其中的原因。首先,看一下抽签问题:N只签里面有一只好签,N个原创 2015-06-18 17:04:35 · 1891 阅读 · 0 评论 -
进程之间的8种通信方式
总结下进程之间通信方式。1无名管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。2高级管道(popen):将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,这种方式我们成为高级管道方式。3有名管道 (named pipe) : 有名管道也是半双工的通信方式原创 2015-06-17 21:48:18 · 651 阅读 · 0 评论 -
寻找和为定值的两个数
首先感谢July的编程艺术课程,总结得很好,现在转载在此。寻找和为定值的两个数题目描述输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(N)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。分析与解法咱们转载 2015-06-08 22:19:19 · 635 阅读 · 0 评论 -
字符串匹配的几种算法总结(KMP、等)
字符串匹配(string match)是在实际工程中经常会碰到的问题,通常其输入是原字符串(String)和子串(又称模式,Pattern)组成,输出为子串在原字符串中的首次出现的位置。通常精确的字符串搜索算法包括暴力搜索(Brute force),KMP, BM(Boyer Moore), sunday, robin-karp 以及 bitap。下面分析这几种方法并给出其实现。假设原字符串长度M转载 2015-06-03 19:53:19 · 1185 阅读 · 0 评论 -
已知田字形的2*2的格子里面有9个矩形(包含正方形),问N*N的格子有多少个矩形?
思路:从点开始,矩形有什么特征?一个矩形必须是四个点组成吧,而且角必须是90度。那么两个点组成一条边吧,好的。那么以3*3为例,最上边的横1边,总共可以确定C(2,4)种情况下的横边,然后上边确定了,确定与其垂直的竖边,此时可以有几种选择方法?大家注意,此时竖边只有三种情况,就是他的长度,分别是长度为一,长度为2,长度为3的竖边,因为必须要保持垂直的关系,竖边没有其他选择,只能是这三种情况。那原创 2015-06-02 10:47:56 · 4152 阅读 · 0 评论 -
求旋转数组的最小数字——二分查找算法的深入理解
没想到啊,没想到,面试第一家互联网企业的时候,就是这一问题。之前又看到过这个题型,但是没有自己动手写过代码,所以花了一些时间才想出思路来,真是汗颜。在这里重新做一下思路总结。二分查找算法,针对一个有序的数组,可以有O(log2n)的时间复杂度。那对于相对有序的数组,比如旋转数组,array1[]={4,5,1,2,3},这种情况下如何查找数组当中的最小值?思路:其实还是用二分查找的思路,如原创 2015-06-02 10:11:44 · 641 阅读 · 0 评论 -
查找——相邻元素差的绝对值都是1的数组当中的某个数,百度笔试题
题目是这样的:有这样一个数组A,大小为n,相邻元素差的绝对值都是1,如A={4,5,6,5,6,7,8,9,10,9}。现在给定数组A和目标整数t,请找到t在数组中的位置。嗯,看到这个题目,想了一会儿,然后又想到《剑指offer》当中学到的分析问题的方法,那就是不管遇到什么题,举一两个例子,慢慢就可以看出规律了。于是乎就试验了一把这道题,不出所料,试了两步就想出了方法。思路是这样的:假原创 2015-05-28 23:32:02 · 3183 阅读 · 0 评论 -
求字符串中最大的回文长度
啊,接着上一篇判断字符串是否回文的问题,这一篇来解决另一个问题,求一个字符串当中最长的回文长度。思路呢,因为考虑到一个任意的字符串,用中心向两边扩散的方法来判断回文是靠谱的。即,如果一段字符串是回文,那么以某个字符为中心的前缀和后缀都是相同的,例如,以“aba”为例,以b为中心,他的前缀和后缀都是相同的a。这样,我们就从字符串第一个字符开始,然后看它的左边和右边是否相等,当然啦,第一个字符原创 2015-05-27 17:05:41 · 2998 阅读 · 0 评论 -
简单判断字符串是否是回文
面试题中经常碰到求字符串当中的最大回文子串,在实现这个函数之前,先来实现一下如何判断回文的方法吧。其中两个思想可以用到,都是用两个指针遍历字符串。第一种是两个指针分别指向首尾,然后向中间靠拢,判断指向的字符是否相等,空间复杂度O(1),时间复杂度O(n)。第二种是将两个指针指向字符串的中间元素上,嗯,确切的说分两种情况,即字符串长度是奇数和偶数时。奇数时,两个指针分别指向中间元素的左右两边原创 2015-05-27 14:49:47 · 1490 阅读 · 0 评论 -
实现字符串到数字的转换
嗯,今天看了JUly的编程艺术系列的文章,讲的很好,这个字符串到数字的转换程序写的很全面,考虑了空指针,非法输入,溢出问题等。非常好,学习了,现在把这个程序贴在这里,供以后需要时使用。另外一点,long long int类型的数据范围是-2147483648~2147483647,也就是负二十多亿到正的二十多亿,带符号十进制数11位,无符号12位。因此我给字符串动态分配了12位大小的char型原创 2015-05-27 11:57:43 · 591 阅读 · 0 评论 -
迅雷2014校招笔试编程题——求解两个集合差集,集合是以单向链表存储
问题描述:已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。例如,若集合A={5,10,20,15,25,30},集合B={5,15,35,25},完成计算后A={10,20,30}。链表结点的结构类型定义如下:struct node { int elem;原创 2015-05-26 14:40:37 · 992 阅读 · 0 评论 -
华为2014笔试编程题——字符串压缩
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。压缩规则: 1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。 2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。要求实原创 2015-05-26 08:56:16 · 1715 阅读 · 0 评论 -
二分查找的一个题---找出排序数组中绝对值最小的数
有一个已经排序的数组(升序),数组中可能有正数、负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现,例如,数组{-20,-13,-4, 6, 77,200} ,绝对值最小的是-4。这一题该如何求呢?思路:直接用二分法进行查找,判断依据是比较a[left]和a[right]的绝对值,然后更新mid。原创 2015-05-24 15:36:03 · 2090 阅读 · 0 评论 -
求最大子数组的和(动态规划法)
还是动态规划方法的适应广些,数组可以全是负数。前面没用动态规划方法如何实现,还需进一步思考,明天继续。/* FindGreatestSumofSubArray.cpp : 定义控制台应用程序的入口点。 @mishidemudong @2015-5-22*/#include "stdafx.h"int max(int x, int y){ return x > y ? x :原创 2015-05-22 23:12:07 · 873 阅读 · 0 评论 -
最大子数组的求和方法一(非动态规划)
/* FindGreatestSumofSubArray.cpp : 定义控制台应用程序的入口点。 @mishidemudong @2015-5-22*/#include "stdafx.h"int FindGreatestSum(int *A, int length){ int CurentSum = A[0]; int StateSum = 0; if (A == NUL原创 2015-05-22 22:50:44 · 716 阅读 · 0 评论