08 2013 档案
摘要:问题刚才在首页看到一篇博客,说的是腾讯的一道面试题:一个楼梯有50个台阶,每一步可以走一个台阶,也可以走两个台阶,请问走完这个楼梯共有多少种方法?博主把这题分析的很麻烦。引来很多人围观。我以前也碰到过这个问题。写出来和大家分享一下。举个例子,假设有3个台阶,则有三种走法:分别是,1-1-1, 1-2, 2-1。分析很简单的一道题,学过组合数学的人很快就能想到,这是一个递推关系。假设走完k个台阶有f(k)种走法。k = 1时,f(k) = 1k = 2时,f(k) = 2k = n时,第一步走一个台阶,剩n-1个台阶,有f(n - 1)种走法。第一步走两个台阶,剩n-2个台阶,有f(n - 2)
阅读全文
摘要:这个是在博客园的博问里面看到的1、现有1000个苹果,10个盒子,现在要你将1000个苹果装入10个盒子中,使得用户无论购买多少个苹果(1-1000),都能由若干个盒子拼装而成(卖的时候是整个盒子卖,不能拆盒子的包装)解法:考虑1, 2, 4, 8这四个数,由这四个数可以组成1-15之间任意一个数,也即1,2, 4 ... 2n 可以组成1-2(n+1)-1之间所有的数。所以这十个盒子分别放入1, 2, 4, 8, 16, 32, 64, 128, 256, 489个苹果,即可组成1-1000内所有的数。2. 有1000瓶液体,无色无味,外表完全一样,其中一瓶是毒药,有10条警犬,警犬喝过毒药
阅读全文
摘要://矩形结构struct Rect{ int leftTopX;//左上角横坐标 int leftTopY;//左上角纵坐标 int rightBottomX;//右下角横坐标 int rightBottomY;//右下角纵坐标};bool CrossLine(const Rect &r1, const Rect &r2){ return abs((r1.leftTopX + r1.rightBottomX) - (r2.leftTopX + r2.rightBottomX)) < (abs(r1.rightBottomX + r2.rightBottomX - ...
阅读全文
摘要:1.哪个表达式不能用这个匹配:a(bc)*d?A.adB. abcdC.abcD.abccd2.INTEL X86 CPU中,哪种运算最慢:A.加B. 减C.乘D.除3.下面程序的输出:#include using namespace std;int main(){ bool first=true; int sum =0; int current_value; for(unsigned short i=65535;i>=0;--i ) { if(first) { current_value=65535; ...
阅读全文
摘要:---恢复内容开始---一、单项选择题1、从n个未排序的数中寻找中位数(第[n/2]大的数),平均时间复杂度最优算法的复杂为:A.O(logn) B.O(n) C.O(nlogn) D.O(n^2)分析:求无序数组的中位数中位数即是排过序后的处于数组最中间的元素。 不考虑数组长度为偶数的情况。设集合元素个数为n。简单的想了下:思路1) 把无序数组排好序,取出中间的元素 时间复杂度 采用普通的比较排序法 O(N*logN) 如果采用非比较的计数排序等方法, 时间复杂度 O(N), 空间复杂度也是O(N).思路2) 2.1)将前...
阅读全文
摘要:1、已知两个数字为1~30之间的数字,甲知道两数之和,乙知道两数之积,甲问乙:“你知道是哪两个数吗?”乙说:“不知道”。乙问甲:“你知道是哪两个数吗?”甲说:“也不知道”。于是,乙说:“那我知道了”,随后甲也说:“那我也知道了”,这两个数是什么?答案: 允许两数重复的情况下 答案为x=1, y=4; 甲知道和A=x+y=5, 乙知道积B=x*y=4 不允许两数重复的情况下有两种答案 答案1: 为x=1, y=6; 甲知道和A=x+y=7, 乙知道积B=x*y=6 答案2: 为x=1, y=8; 甲知道和A=x+y=9, 乙知道积B=x*y=8 解: 设这两个数为x,y. 甲知道两数之和 A=x
阅读全文
摘要:1、单项选择题1.1 如果把传输速率定义为单位时间内传送的信息量(以字节计算)多少。关于一下几种典型的数据传输速率:1.使用USB2.0闪存盘,往USB闪存盘上拷贝文件的数据传输速率2.使用100M以太网,在局域网内拷贝大文件时网络上的数据传输速率3.使用一辆卡车拉1000块单块1TB装满数据的硬盘,以100km/h的速度从上海到天津(100km)一趟所等价的数据传输带宽4.使用电脑播放MP3,电脑的PCI总线到声卡的数据传输速率在通常情况下,关于这几个传输速率的排序正确的是:A.41的概率是:A.3/8B.3/16C.9/32D.9/64分析:标准做法是先画出y=1-x的线,上侧阴影部分就是
阅读全文
摘要:1.单项选择题1.1 使用C语言将一个1G字节的字符数组从头到尾全部设置为字符'A',在一台典型的当代PC上,需要花费的CPU时间的数量级最接近: A. 0.001秒 B. 1秒 C. 100秒 D. 2小时解答:现在机器cpu都是GHz,每次需要若干个指令,大约在1秒。1.2 在某些极端要求性能的场合,我们需要对程序进行优化,关于优化,以下说明正确的是:A. 将程序整个用汇编语言改写会大大提高程序性能。B. 在优化前,可以先确定哪部分代码最为耗时,然后对这部分代码使用汇编语言改写,使用的汇编语句数目越少,程序就运行越快。C. 使用汇编语言虽然可能提高程序性能,但是降低了程..
阅读全文
摘要:1、下面代码中for循环共执行了多少次?unsigned short i,j;for(i=0, j=2; i!=j; i+=5, j+=7){}unsigned short占用2个字节,当数据范围到头了(2^16-1),就又从0开始计数了,这个其实就是两辆汽车行驶在一个圆圈里的汽车追及问题。一个速度为5,一个速度为7,当速度为7的超越速度为5的时候,两个汽车就相遇了,2 + 7n- 5n= 2^16 所以共循环了32767次。unsigned short i,j; for(i=3,j=7;i!=j;i+=3,j+=7) 这个也是一样的,7 + 7n- (3+3n)= 2^162、下面程序应..
阅读全文
摘要:1、程序输出结果(12)#include using namespace std;class Base {public: Base(int j) : i(j) {} virtual ~Base() {} void func1() { i *= 10; func2(); } int getValue() { return i; }protected: virtual void func2() { i++; }protected: int i;};class Child ...
阅读全文
摘要:1、1到1亿的数字之和?方法一:分析:两数相加如果有进位,则两数数字之和大于和的各位数字之和。例如:23+46=69,2+3+4+6=6+9;而97+8=105,9+7+8>1+0+5。所以,要把1——100000000这样分组:(0,99999999),(1,99999998),(2,99999997)(3,99999996)……(49999999,50000000),共50000000组,还剩下数字100000000。这样每一组的数字之和都是:9*8=72总和为:72*50000000+1=3600000001(36亿零1)方法二:1到1亿的自然数,求所有数的拆分后的数字之和,如28
阅读全文
摘要:选择题1.求长度为N的散列表的检索长度。分析:按照顺序求和,然后求平均即可2.栈、队列的出入顺序。栈:先入后出,队列:先入先出。3.数组的定义。4.求程序结果。intk=0;char*s='121';do{ k++; if(k%2=0) { a=a+s[k]-‘0’; continue; } b=b+s[k]-‘0’; a=a+s[k]-‘0’;}while(s[k+1])然后输出k/a/b的值分别为多少。5.sql命令,增加一行是哪个命令?分析:insert ...6.创建非主键数据库索引有什么好处?提高(降低)插入速度、提高(降...
阅读全文
摘要:第一部分:四个中选出不同的一个。1.A:CVS B:SVN C:GIT D:SSHCVS是一个C/S系统,多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。CVS版本控制系统是一种GNU软件包,主要用于在多人开发环境下的源码的维护。SVN(subversion)是近年来崛起的版本管理工具,是cvs的接班人。目前,绝大多数开源软件都使用svn作为代码版本管理软件。Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。SSH
阅读全文
摘要:一、不定项选择题1、HTTP状态码500代表什么含义(C)A、请求资源未在服务器上发现B、请求成功,相应的响应头或数据包丢失C、服务器错误D、返回时间500ms注解:HTTP状态码:500:Internal Server Error服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现。404:Not Found请求失败,请求所希望得到的资源未被在服务器上发现。2、下面那些不是链表的特点(B)A、插入不需要移动B、快速随即访问一个节点C、所需存储空间与线性表长度成正比D、不用预估计存储大小3、向一个栈找push下列元素,ABCDE,其po
阅读全文
摘要:一、不定项选择题1.C/C++语言:以下打印结果为()。#include using namespace std;void swap_int(int a, int b){ int temp = a; a = b; b = temp;}void swap_str(char *a, char *b){ char *temp = a; a = b; b = temp;}int main(){ int a = 10; int b = 5; char *str_a = "hello world"; char *str_b = "world he...
阅读全文
摘要:第一部分(必做): 计算机科学基础1. (单选)软件设计中模块划分应该遵循的准则是:A.低内聚低耦合 B.高内聚低耦合 C.低内聚高耦合 D.高内聚高耦合答:B内聚指模块内部各成分之间相关程度的度量 强度性低到高分成 偶然内聚 :关系松散没什么联系 逻辑内聚:几个逻辑上相关的功能被放在同一模块中,如一个模块读取各种不同类型外设的输入,逻辑内聚的模块各成分在功能上并无关系。时间内聚:一个模块完成的功能必须在同一时间内执行,这些功能只是因为时间因素关联在一起。通信内聚:如果一个模块的所有成分都操作同一数据集或生成同一数据集,则称为通信内聚。顺序内聚: 如果一个模块的各个成分和同一个功能密切相关,而
阅读全文
摘要:一、填空1、多任务系统里面,一个任务可以在占有资源的同时申请资源,这会导致_死锁_. 2、实现内联函数的关键词是_inline_ 3、ping、tracert是属于tcp/ip协议族里面的哪个协议? ICMP二、简答1、请尽可能举出你所知道的数据库备份与还原的方法(数据库类型不限,只要知道的就写上)备份:1)直接拷贝要备份的数据库数据2)oracle用rman进行备份3)用sql导入方式4)日志备份5)完整备份6)差异备份还原:1)oracle用rman进行还原2)用sql导出方式3)日志还原4)差异还原2中断是什么?cpu在中断的时候做了些什么?答:中断就是中止当前正在执行的工作,而去执行.
阅读全文
摘要:1、写出输出:char array[] = “abcde”; char* s = array;coutllink; //q是p的前驱结点; q->llink->rlink=p; p->llink=q->llink; q->rlink=p->rlink; q->llink=p; p->rlink->llink=q; p->rlink=q;}6、*.dll,*.lib,*.exe文件分别是什么,有什么区别?见:http://www.cnblogs.com/no7dw/archive/2010/11/23/1885890.html用C语言把
阅读全文
摘要:1、对于一个内存地址是32位、内存页是8KB的系统。0X0005F123这个地址的页号与页内偏移分别是多少。页面大小是8KB,那么页内偏移量是从0x0000(0)~ 0x1FFF(2的13次方 - 1)。0x5F123/8K=2E,余数是1123;则页号是47页,页内偏移量应该是0X00001123。2、如果X大于0并小于65536,用移位法计算X乘以255的值为:(X(p);p1++; //整型占四个字节p1++后指向tp = static_cast(p1);printf("result is %s\n",p);8、在一冒险游戏里,你见到一个宝箱,身上有N把钥匙,其中一把
阅读全文
摘要:第一部分(必做):计算机科学基础1、长为N的字符串中匹配长度为M的子串的算法复杂度是()A. O(N) B. O(M+N) C. O(N+logM) D. O(M+logN)答:B分析:我查了查,O(M + N)。KMP能做到。这里:http://blog.csdn.net/meixr/article/details/64568962、以下排序算法中,哪些是稳定的排序算法(多选)()A.冒泡B.插入C.合并D.希尔E.快速排序答:ABC3、以下是一颗平衡二叉树,请画出插入键值3以后的这颗平衡二叉树。分析:考察平衡二叉树的基本操作,插入3变成不平衡,需要节点5右旋一次,节点2左旋一次。。4、给定
阅读全文
摘要:选择题:1、二维数组int a[3][4],下列能表示a[1][2]的是?A.*(*(a+1)+2) B.*(a+3) C.(&a[0]+1)[2] D.(a[0]+1)2、short a[100],则sizeof(a)的值是?A.2 B.4 C.200 D.400问答题:1、解释说明static、const和volatile两个关键字的作用?关键字static有三个明显的作用:1、在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。2、在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所有函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。3...
阅读全文
摘要:1、假设进栈次序是e1, e2, e3, e4,那可能的出栈次序是()A、e2, e4, e3, e1B、e2, e3, e4, e1C、e3, e2, e4, e1D、e1, e2, e4, e3给定入栈顺序,求出可能的出栈顺序。(点评:老得掉渣得题目了,只要小心点都没有问题)2、表达式X=A+B*(C-D)/E的后缀表示形式可以是()A、XAB+CDE/-*=B、XA+BC-DE/*=C、XABCD-*E/+=D、XABCDE+*/=分析:XABCD-*E/+=3.四叉树中包含地空指针数量有多少?假设每个节点含有四个指向其孩子的指针,那么给定n个节点,其4n个指针有多少指向空?(比较简单的
阅读全文
摘要:1.一颗完全二叉树共有768个节点,求叶节点个数__384__个。2.一颗由链表实现的有n个节点,那么指针数____个,指向节点的指针数____个,空闲的指针个数____个。3.哈希散列题,给了11个数字,使用0到12进行散列,填一张表4.1000的阶乘的尾部0的个数__249__个5.liux下mkdir,如果父目录不存在,使用附属命令创建父目录6.”vmstat1“的命令,给出了一张表格,及6个选项判断正误(记不得了)7.(树)前序AEFBGCDHIKJ,中序:EFAGBCHKIJD,求后序8.(数据库题)Table1:(5 2 2)(5 3 1)(5 2 3)Table2:(5 2 2)
阅读全文
摘要:人人公司 C++笔试选择填空题1,下列叙述中,正确的是( )A. 线性链表中的各元素在存储空间中的位置必须是连续的B. 线性链表中的表头元素一定存储在其他元素的前面C. 线性链表中的各元素在存储空间中的位置不一定是连续的,但表头元素一定存储在其他元素的前面D. 线性链表中的各元素在存储空间中的位置不一定是连续的,且各元素的存储顺序也是任意的2,已知二叉树后序遍历序列是edcfba,中序遍历序列deacbf,它的前序遍历序列是adebcf3,如果进栈序列为e1,e2,e3,e4,则可能的出栈序列是______________4,若有定义语句: int a[3][6];,按在内存中的存放顺序,a数
阅读全文
摘要:C++笔试题目。1.算法的几个概念:时间复杂度,空间复杂度等等。2.采用链地址法处理长度的时候,哈希表查找成功的平均长度与哪些因素有关?哈希表的装填因子有关。装填因子= 表中填入的记录数/哈希表的长度。3.二叉树节点的计算: 二叉树中度为1的节点有8个,度为0的节点有3个,问这颗二叉树总共有多少节点? 对于任意一棵二叉树BT,如果度为0的结点个数为n0,度为2的结点个数为n2,则n0=n2+1。 所以度为2的节点个数为3-1 = 2,那么总共的结点个数就是3+2+8 = 13。 顺便复习一下完全二叉树的计算。 完全二叉树有一个特点,就是度为1的节点数要么为1,要么为0。可以自己画出图来看看。
阅读全文
摘要:一、选择题(每题5分,共计50分)1、对于全局函数 int f(void) ,与其完全等价的函数原型为()A、int &f(); B、int f(void) const; C、const int f(); D、A、B、C都不是分析:对于int这种数据类型。函数返回的是个常量。与加了const限定的一样,同样不能作为左值。 二者是等价的。我是说int这种类型,如果用户自定义的类型,有时是可以修改,可以作为左值的,这时候就不等价了。。2、下列关于构造函数的描述中,错误的是()A、构造函数可以设置默认的参数B、构造函数在定义类对象时自动执行C、构造函数可以是内联函数D、构造函数不可以重载分.
阅读全文
摘要:常见的问题有以下几类:问题一:有101个数,为[1,100]之间的数,其中一个数是重复的,如何寻找这个重复的数,其时间复杂度和空间复杂度是多少?方法:利用和sum1=1+2+3+.....99;sum2=a[0]+a[1]+.....a[99];sum2-sum1=重复的那个值int OnlyOneRepeate(int *iArray,int length){ int i,sum = 0,sumMax = 0; for(i = 0;i < length; i++) { sum += i; sumMax += iArray[i]; } ...
阅读全文
摘要:1、给定一个N位数,例如12345,从里面去掉k个数字,得到一个N-k位的数,例如去掉2,4,得到135,去掉1,5,得到234。设计算法,求出所有得到的N-k位数里面最小的那一个?解决方案一:(1)第一步要确定剩余N-K位的数的最高位:从个位开始算起,从第N-K位开始向高位比较,求出最小数字,作为高位。例如,3 1 1 2 3 3 1,K=3时,从7-3=4开始(为2),向上比较发现,1更小,所以高位设置为1,记录此时位置P1(等于也可以替换,从而取最高位的1).(2)再确定次高位:从N-K-1开始向上到P1-1,此时最小数字为1.依此类推,最后就可以得到最小数1121. 解决方案二:例如,
阅读全文
摘要:一、填空侧重逻辑思维,没有语言、具体技术考察,大部分属于组合数学、算法。比较基本的知识点有二元树节点树、最小生成树、Hash函数常用方法等。二、编程题1、正整数剖分2、AOE关键路径3、二元树前序、中序求后序4、大整数加//正整数剖分#include int func(int n, int k, int max){ int min = (int)((n+k-1)/k); if(k==1) return 1; int count = 0; for(int i=min;i#include #include void AOE(int adj[][9], int ...
阅读全文
摘要:填空题:1、中序遍历二叉树,结果为ABCDEFGH,后序遍历结果为ABEDCHGF,先序遍历结果为? FCBADEGH 如下图所示:2、对字符串HELL0_HULU中的字符进行二进制编码,使得字符串的编码长度尽可能短,最短长度为?25;(哈弗曼编码)1*4+1*4+1*3+3*2+2*2+2*2=253、对长度12的有序数组进行二分查找,目标等概率出现在数组的每个位置上,则平均比较次数为?37/12;(1*1 + 2*2 + 4*3 + 5*4)/12 = 37/124、一副扑克(去王),每个人随机的摸两张,则至少需要多少人摸牌,才能保证有两个人抽到同样的花色。分析:11,4+C(4,2)=1
阅读全文
摘要:2009年微软清华笔试笔经第一部分 Basics 应该是常识题。一些 Threads,Memory Manager, HTTP session ,OSI&HTTP,Heap&Stack,BTree,SortingAlgorithm 等等。这部分我答的很菜因为没有复习且荒于时间估计要覆没了,基本的内容还是操作系统和数据结构第二部分Reasoning 和以前GRE 的Analitical 很像有组题 也有单题做的还算比较爽第三部分 Programming一道题一个单向链表 给出 链表头pHead 和另一个链表中位置pStartNode,要把它转化为以pStartNode 为头的链表
阅读全文
摘要:一选择题1stack的基本操作有哪些?Pushin,pushout,checkifempty(sort不是)2最坏情况下,合并两个大小为n的已排序数组所需要的比较次数答案:2n-1.3、求函数的空间和时间复杂度答案:时间复杂度为O(n),空间复杂度O(1)PS:不知道我做的对不对4解释语言的特性:非独立效率低性5二叉树的前序遍历,中序遍历和后续遍历问题:类似与下面6最坏情况下insertsort,stacksort,quicksort,mergesort的复杂度分别是多少?冒泡排序:o(n*n)选择排序:o(n*n)插入排序:o(n*n)快速排序:O(nlogn)堆排序:O(nlogn)归并排
阅读全文
摘要:选择题 10题 答对一题4分 没答0分 打错扣1分1.二叉树的任意两个节点间有一个唯一路径,求出n个节点的二叉树的最长路径的两个节点的最优算法时间复杂度是多少(编程之美3.8,但是树的边是有权的)分析:我一开始以为就是求关键路径,其实不是的,求关键路径时会告诉你起点和终点。思考了一会儿,其实O(n)就够了:从叶子节点开始,找到每个结点的经过它能得到的最长路径和它的最长分支, (node1) e1/ \e2(node2) (node3)很明显,经过node1的最长路径为node2和node3的最长分支之和再加上两条边(e1和e2)的长度代码如下:(该方法实际上不只支持二叉树, 注...
阅读全文
摘要:题目:共20题,不定项选择题,分数如下:题目序号全部答对部分对有错未答voidX-XXXX-X0答错是要倒扣分的。从笔试的通知邮件可看到,需要准备的是2B铅笔和橡皮,故应推知是考选择题一类的客观题。以下是我记忆中的题目:1. memcpy和memmove,在dest & src have overlap area情况下谁更安全?(#16)2. 99!的阶乘结果末尾有多少个trailing zero?(我填的是22个)(#18)3.最短路径题,图论的知识(#7)4. MVC里谁是C(#2)A.Javascript B.HTML C.Web Service D.Database E我记不清
阅读全文
摘要:1. Suppose that a Selection Sort of 80 items has completed 32 iterations of the main loop. How many items are now guaranteed to be in their final spot (never to be moved again)?(A) 16 (B) 31 (C) 32 (D) 39 (E) 402. Which Synchronization mechanism(s) is/are used to avoid race conditions among processe
阅读全文
摘要:1. You are managing the database of a book publichser, you currently store the book orders your company receives in the following BookOrders table. You manager has asked you to generate a report to list all the orders where the quantity ordered was greater than the average quantity per order for tha
阅读全文
摘要:1. Which of the following calling convention(s) support(s) supportvariable-length parameter(e.g. printf)?(3 Points) A. cdecl B. stdcall C. pascal D. fastcall问题解析:本题要求选出像printf一样支持变长参数的函数调用约定。1.什么是函数调用约定?答:当一个函数被调用时,函数的参数会被传递给被调用的函数,同时函数的返回值会被返回给调用函数。函数的调用约定就是用来描述参数(返回值)是怎么传递并且由谁来平衡堆栈的。2.常见的函...
阅读全文
摘要:vector容器概述 vector的数据安排以及操作方式,与array非常相似。两者的唯一区别在于空间的运用的灵活性。array是静态空间,一旦配置了就不能改变;要换个大(或小)一点的房子,可以,一切琐细都得由客户端自己来:首先配置一块新空间,然后将元素从旧址一一搬往新址,再把原来的空间释还给系统。vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。因此,vector的运用对于内存的合理利用与运用的灵活性有很大的帮助,我们再也不必因为害怕空间不足而一开始要求一个大块头的array了,我们可以安心使用array,吃多少用多少。 vector的实现技术,关键在于其对大小
阅读全文
摘要:问题:许多程序会大量使用字符串。对于不同的字符串,我们希望能够有办法判断其相似程度。我们定义了一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为:1.修改一个字符(如把“a”替换为“b”)。2.增加一个字符(如把“abdd”变为“aebdd”)。3.删除一个字符(如把“travelling”变为“traveling”)。比如,对于“abcdefg”和“abcdef”两个字符串来说,我们认为可以通过增加/减少一个“g“的方式来达到目的。上面的两种方案,都仅需要一次操作。把这个操作所需要的次数定义为两个字符串的距离,给定任意两个字符串,你是否能写出一个算法来计算出它们的距离?分析与解法不
阅读全文
摘要:问题:给定两个字符串s1和s2,要求判断s2是否能够被通过s1做循环移位(rotate)得到的字符串包含。例如,S1=AABCD和s2=CDAA,返回true;给定s1=ABCD和s2=ACBD,返回false。解法一:从题目中可以看出,我们可以使用最直接的方法对S1进行循环移动,再进行字符串包含的判断,从而遍历其所有的可能性。字符串循环移动,时间复杂度为O(n),字符串包含判断,采用普通的方法,时间复杂度为O(n*m),总体复杂度为O(n*n*m)。字符串包含判断,若采用KMP算法,时间复杂度为O(n),这样总体的复杂度为O(n*n)。若字符串的长度n较大,显然效率比较低。其中n为S1的长度
阅读全文
摘要:何谓海量数据处理? 所谓海量数据处理,其实很简单,海量,海量,何谓海量,就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大,导致无法一次性装入内存。 那解决办法呢?针对时间,我们可以采用巧妙的算法搭配合适的数据结构,如Bloom filter/Hash/bit-map/堆/数据库或倒排索引/trie/,针对空间,无非就一个办法:大而化小:分而治之/hash映射,你不是说规模太大嘛,那简单啊,就把规模大化为规模小的,各个击破不就完了嘛。 至于所谓的单机及集群问题,通俗点来讲,单机就是处理装载数据的机器有限(只要考虑cpu,内存,硬盘的数据交互),而集群,机器有多辆,适合分布式
阅读全文
摘要:实现把单循环链表例置算法的思考过程:第一:需要保存临时数据的变量,不然无法完成倒置。第二:要完成倒置就需要遍列,又需要一个变量第三:用于得到最后的结果,这个暂时考虑也需要一个变量单个节点的倒置是本身,1->1两个节点的倒置1->2,可以参考两个数的交换,这就需要临时变量了 p=head; 1q=head->next; 2s =p ; 1q->next = s;2->1p->next =q; 1->2->1三个节点。。。。。。。//这样得到了头指针*p=head;//2。完成遍列的代码 *q=head->next;while(q!=head)
阅读全文
摘要:约瑟夫环问题可以简单的使用数组的方式实现,但是现在我使用循环链表的方法来实现,因为上午看到一道面试题规定使用循环链表解决约瑟夫环问题。 什么是约瑟夫环? “约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。”(百度百科中的解决办法列出了很多,可以看到循环链表并不是最简单的方法) 这道面试题考察了循环链表的“创建”,“遍历”和“删除”。创建的循环链表的结构图:解决约瑟夫环问题的过程#includeusing ...
阅读全文
摘要:全排列在笔试面试中很热门,因为它难度适中,既可以考察递归实现,又能进一步考察非递归的实现,便于区分出考生的水平。所以在百度和迅雷的校园招聘中都会考到。。首先来看看题目是如何要求的(百度迅雷校招笔试题)。题目:用C++写一个函数, 如 Foo(const char *str), 打印出 str 的全排列,如 abc 的全排列: abc, acb, bca, dac, cab, cba。。一、全排列的递归实现为方便起见,用123来示例下。123的全排列有123、132、213、231、312、321这六种。首先考虑213和321这二个数是如何得出的。显然这二个都是123中的1与后面两数交换得到的。
阅读全文
摘要:冒泡排序改一下都能成为一个合理的洗牌算法。。。。#include static int a[56];int main(){ char input; for(int i = 0; i > input) { for(int i = 0; i < 55; ++i) for(int j = 0; j <= i; ++j) { if(a[j] + a[j+1] % 2) { int temp; ...
阅读全文
摘要:当前面试中各大名企经常出现各种各样的概率类面试题。究其原因,我觉得是概率型面试题可以综合考查面试者的思维能力、应变能力、数学能力。在这里对各种类型的概率型题目进行了收集和总结,希望在自我总结的同时对大家有所帮助。1、给你一个数组,设计一个既高效又公平的方法随机打乱这个数组(此题和洗牌算法的思想一致)方法比较简单,基本思想是每次随机取一个数,然后把它交换到最后的位置。然后对前(n-1)个数使用递归的算法。递归实现:void suffle_dfs(int ar[], int n){ if(n1){ swap(ar[n-1], ar[rand()%n]); n--;...
阅读全文
摘要:利用等概率函数Rand5产生等概率函数Rand3问题描述:现在有一个叫做Rand5的函数,可以生成等概率的[0, 5)范围内的随机整数,要求利用此函数写一个Rand3函数(除此之外,不能再使用任何能产生随机数的函数或数据源),生成等概率的[0, 3)范围内的随机整数。//使用Rand5()实现Rand3()int Rand3(){ int x; do { x = Rand5(); } while (x >= 3); return x;}//利用Rand3编写Rand5怎么办?int Rand5(){ int x; do { ...
阅读全文
摘要:第一步:假设两个有序数组(已经各自排序完成了)长度相等,试写函数找出两个数组合并后的中位数?第二步:假设两个有序数组长度不等,一样的求出中位数?思想是二分查找。。。解析: 这个题目看起来非常简单。第一题的话: 假设数组长度为n, 那么我就把数组1和数组2直接合并,然后再直接找到中间元素。对于这样的方案,第一题和第二题就没有什么区别了。这样的话时间复杂度就是O(n)。通常在这样的情况下,那些mentor类型的达人就会循循善诱道:“你还有更好的办法吗:)” 如果比线性更高效,直接能想到的就是对数了O(log(n)),这个时间复杂度在这里可能吗? 当然还是可能的。来继续看看下面的分析。先找来了一个图
阅读全文
摘要:对于const变量,我们不能修改它的值,这是这个限定符最直接的表现。但是我们就是想违背它的限定希望修改其内容怎么办呢?于是我们可以使用const_cast转换符是用来移除变量的const限定符。const_cast类型转换能够剥离一个对象的const属性,也就是说允许你对常量进行修改。#includeusing namespace std;/*用法:const_cast (expression) 该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。 一、常量指针被转化成非常量指针,并且仍然..
阅读全文
摘要:1、C++ vector相关:1)push_back函数的内存分配是如何实现的?2)clear函数的内存分配是如何实现的?2、如何去掉重复页面?3、如何对Query进行分类4、一串首尾相连的珠子(m个),有N种颜色(N《=10),设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短。并分析时间复杂度与空间复杂度。
阅读全文
摘要:一、简答题:1、extern “c”{}是什么含义?用来解决什么问题?分析;extern "C" 包含双重含义,从字面上即可得到:首先,被它修饰的目标是“extern”的;其次,被它修饰的目标是“C”的。让我们来详细解读这两重含义。extern “c”是指将该段代码以C语言形式进行编译、链接。由于C不支持函数重载,C与C++对于同一函数进行编译后在符号表中保存的函数名存在差异,故当进行C、C++混编时会出现一些问题。用来解决C与C++程序连接问题,extern "C" 实现的类C和C++的混合编程2、写出至少两种设计模式,阐明其使用场景,有伪代码更好。单
阅读全文
摘要:一、算法设计1、设rand(s,t)返回[s,t]之间的随机小数,利用该函数在一个半径为R的圆内找随机n个点,并给出时间复杂度分析。思路:这个使用数学中的极坐标来解决,先调用[s1,t1]随机产生一个数r,归一化后乘以半径,得到R*(r-s1)/(t1-s1),然后在调用[s2,t2]随机产生一个数a,归一化后得到角度:360*(a-s2)/(t2-s2)其他思路:由于rand(s,t)可以返回[s,t]之间的随机小数。对于一个点,我们可以根据两个条件得到它:a.如果能够随机求出点的x和y坐标。b:已知点到圆心的距离和该连线的角度,也可以。第一种情况:x = rand(-1,1)*R;y =
阅读全文
摘要:1、给一个单词a,如果通过交换单词中字母的顺序可以得到另外的单词b,那么b是a的兄弟单词,比如的单词army和mary互为兄弟单词。现在要给出一种解决方案,对于用户输入的单词,根据给定的字典找出输入单词有哪些兄弟单词。请具体说明数据结构和查询流程,要求时间和空间效率尽可能地高。字典树的典型应用,一般情况下,字典树的结构都是采用26叉树进行组织的,每个节点对应一个字母,查找的时候,就是一个字母一个字母的进行匹配,算法的时间复杂度就是单词的长度n,效率很高。因此这个题目可以定义一个字典树作为数据结构来查询的,时间效率会很高,这样就转化为在一棵字典树中查找兄弟单词,只要在字典树中的前缀中在存储一个v
阅读全文
摘要:1、解释const的含义及实现机制const的含义及实现机制,比如:const int i,是怎么做到i只可读的?答:const用来说明所定义的变量是只读的。这些在编译期间完成,编译器可能使用常数直接替换掉对此变量的引用。2、买200返100优惠券,实际上折扣是多少?到商店里买200的商品返还100优惠券(可以在本商店代替现金)。请问实际上折扣是多少?答:由于优惠券可以代替现金,所以可以使用200元优惠券买东西,然后还可以获得100元的优惠券。假设开始时花了x元,那么可以买到 x + x/2 + x/4 + ...的东西。所以实际上折扣是50%.(当然,大部分时候很难一直兑换下去,所以50%是
阅读全文
摘要:1、1-20的两个数把和告诉A,积告诉B,A说不知道是多少,B也说不知道,这时A说我知道了,B接着说我也知道了,问这两个数是多少? 答案:2和32、爸爸,妈妈,妹妹,小强,至少两个人同一生肖的概率是多少? 答案:1-12*11*10*9/12*12*12*12 = 1-55/96 = 41/963、计算 a^b 和.(成员)最高; 单目的比双目的高; 算术双目的比其他双目的高; 位运算 高于 关系运算; 关系运算 高于 按位运算(与,或,异或); 按位运算 高于 逻辑运算; 三目的只有一个 条件运算,低于逻辑运算; 赋值运算仅比 , (顺序运算)高。 在此题中,位左移”=0...
阅读全文
摘要:一、选择题1、数据库表设计最合理的是(A)A、学生{id,name,age} 学科{id,name} 分数{学生id,学科id,分数}分析:数据库里面 一般是 学生,学科,分数 分开放。2、在数据库系统中,产生不一致的根本原因是(D)A.数据存储量太大 B.没有严格保护数据 C.未对数据进行完整性控制 D.数据冗余3、15L和27L两个杯子可以精确地装(C)L水?A. 53 B. 25 C. 33 D. 52分析:15和27 升水 可以装出 3升水,故:27 + 3 +3 因此33合理。。4、考虑左递归文法 S->Aa|b、 A ->Ac | Sd |e,消除左递归后应该为(A)e
阅读全文
摘要:一、填空题1、下面的排序算法中,初始数据集的排列顺序对算法的性能无影响的是(B)A、插入排序B、堆排序 C、冒泡排序 D、快速排序2、以下关于Cache的叙述中,正确的是()A、CPU中的Cache容量应大于CPU之外的Cache容量B、Cache的设计思想是在合理成本下提高命中率C、Cache的设计目标是容量尽可能与主存容量相等D、在容量确定的情况下,替换算法的时间复杂度是影响Cache命中率的关键因素3、数据存储在磁盘上的排列方式会影响I/O服务的性能,一个圆环的磁道上有10个物理块,10个数据记录R1------R10存放在这个磁道上,记录的安排顺序如下表所示:物理块123456...
阅读全文
摘要:一、选择题1、32位机上根据下面的代码,问哪些说法是正确的?()signed char a = 0xe0;unsigned int b = a;unsigned char c = a;A. a>0 && c>0 为真 B. a == c 为真 C. b 的十六进制表示是:0xffffffe0 D.上面都不对考点:有符号数和无符号数之间的转换解析:将0xe0转换成二进制是1110 0000,因为0xe0的最高位是1,所以作为有符号数的时候就是负数,作为无符号数的时候就是正数,因此A选项是错的,同时B也是错误的。负数的高位用1补齐,正数的高位用0补齐,所以b(0xe0)
阅读全文
摘要:选择D。循环队列的front和rear必有一个不指向实质元素,不然无法判断队列满或空。C。是这样的原理,磁盘会一直朝某个方向旋转,不会因为处理数据而停止。本题要求顺序处理R1到R10,起始位置在R1,一周是20ms,共10个记录,所以每个记录的读取时间为2ms。首先读R1并处理R1,读R1花2ms,读好后磁盘处于R1的末尾或R2的开头,此时处理R1,需要4ms,因为磁盘一直旋转,所以R1处理好了后磁盘已经转到R4的开始了,这时花的时间为2+4=6ms。这时候要处理R2,需要等待磁盘从R5一直转到R2的开始才行,磁盘转动不可反向,所以要经过8*2ms才能转到R1的末尾,读取R2需要2ms,再处理
阅读全文
摘要:一、选择题1、计算表达式x6+4x4+2x3+x+1最少需要做()次乘法A、3 B、4 C、5 D、6分析:第一次乘法:x^2第二次乘法:x^4=x^2 * x^2第三次乘法:x^2 * (x^4+4x^2+2x)+x+1每一项系数用加法实现。误区:x^2,x^4,x^3,x^6 每一项都通过乘法求出2、给定3个int类型的正整数x,y,z,对如下4组表达式判断正确的选项()Int a1=x+y-z; int b1=x*y/z;Int a2=x-z+y; int b2=x/z*y;Int c1=x>z; int d1=x&y|z; //>(右移) &(按位与,清零时
阅读全文
摘要:一、选择题1、已知中国人的血型分布约为A型:30%,B型:20%,O型:40%,AB型:10%,则任选一批中国人作为用户调研对象,希望他们中至少有一个是B型血的可能性不低于90%,那么最少需要选多少人?A、7 B、9 C、11 D、13分析:题目要求,至少有一个是B型血,那么我们可以求:一个B型血也没有,假设选择x个人,则有1-0.8^x >=0.9 即求0.8^x = 0) --k;A、20次 B、一次也不执行C、死循环 D、21次分析:由于k是unsigned int类型,故,执行无数次。。死循环。。18、关于Cookie 和 Session的概念哪一个是对的()A、Cookie..
阅读全文
摘要:假设圆心所在位置为坐标元点(0, 0)。方法1.在x轴[-1, 1],y轴[-1, 1]的正方形内随机选取一点。然后判断此点是否在圆内(通过计算此点到圆心的距离)。如果在圆内,则此点即为所求;如果不在,则重新选取直到找到为止。正方形的面积为4,圆的面积为pi,所以正方形内的随机点在圆内的概率是 pi / 4。方法2.从[0, 2*pi)中随机选一个角度,对应于圆中的一条半径,然后在此半径上选一个点。但半径上的点不能均匀选取,选取的概率应该和距圆心的长度成正比,这样才能保证随机点在圆内是均匀分布的。
阅读全文
摘要:问题起源于编程珠玑Column 12中的题目10,其描述如下: How could you select one of n objects at random, where you see the objects sequentially but you do not know the value of n beforehand? For concreteness, how would you read a text file, and select and print one random line, when you don’t know the number of lines in a.
阅读全文
摘要:1. 有一个整数数组,请求出两两之差绝对值最小的值, 记住,只要得出最小值即可,不需要求出是哪两个数。方法1:暴力的方式。遍历所有的两个数的差,记录最小值。算法的复杂度O(n2)方法2:两个数要想差的绝对值最小,肯定是需要两个数大小相近。故有思路:先对数组进行排序,然后遍历一遍,相邻的数相减,记录绝对值最小的数。方法3:将现在的问题进行转化:设这个整数数组是a1,a2,...,an构造数组B=(b1,b2,...,bn-1)b1 = a1-a2,b2 = a2-a3,b3 = a3-a4,...bn-1 = an-1 - an那么原数组中,任意两整数之差ai-aj(10) ...
阅读全文
摘要:题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 输入:输入可能包含多个测试样例,对于每个测试案例,输入的第一行为两个整数m和n(1#include using namespace std;string search(int a[][1000], int m, int n, int key){ int i = 0; int j = n - 1; while(i = 0) { if (a[i][j] == key) ...
阅读全文
摘要:题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数。class CMyString{ public: CMyString(char *pData=NULL); CMyString(const CMyString& str); ~CMyString(void); private: char *m_pData; }1、经典解法,初级程序员:CMyString& CMyString::operator =(const CMyString &str){ ...
阅读全文