- 博客(22)
- 收藏
- 关注
原创 重新开始战斗22-程序员面试宝典-P66_7.2面试题3--局部数组和全局数组问题
问题描述:这个函数有什么问题Char *strA(){ Charstr[] = “hello world”; Returnstr;} 这个函数是存在风险的,如果要利用这个函数,例如:Char *p = strA()调用这个函数的意图是希望p指向“hello world”这个字符串,但是注意这条语句,Char str[] = “
2014-04-03 16:24:56
504
原创 重新开始战斗21-程序员面试宝典-P40_5.6面试2--两数交换问题
问题描述:如何将a,b的值进行交换,并且不使用任何中间变量? 书中首先给出了第一种算法,即:a = a+b;b = a-b;a = a-b;这个算法很好理解,稍加思索就可以理解了,但是存在一个问题,a b太大,相加可能溢出。 因此提出了另一种算,用异或:a = a^b;b = a^b;a = a^b;这个算法就不那么容易理解了,下面给出详细的分析
2014-04-03 16:17:26
566
原创 重新开始战斗20-程序员面试宝典-P39_5.5面试题2--求平均数
面试题2:下面代码:Int f(int x,int y){ Return(x&y)+((x^y))>>2);}F(729,271)=________ 首先对于这个题,当然可以一步一步的去算,但是其实这个算法就是求平均数。 仔细分析一下:&:与运算,如果两个数相等,a==b,则a&b ==a == b == (a+b)/2,可以发现,当且仅
2014-04-03 16:08:16
626
原创 重新开始战斗19-程序员面试宝典-P34_5.4面试题2--数据转换与指针转换
数据转换:在表达式中,所有的数据都会向宽型转换,有两个原则:1、为防止精度损失,如果必要的话,类型总是被提升为较宽的类型;2、所有含有小于整型的有序类型的算术表达式在计算之前其类型都会被转换成整型。 值得注意的是有关符号和无符号数之间的转换。显式转换较为简单,我们关心更多的是隐式转换。看看下面的程序输出为多少:signed int a;unsigned int b;
2014-04-03 16:05:17
533
原创 重新开始战斗18-数据结构与算法-01背包问题
01背包问题给定几种物品和一个背包。物品i的重量是wi,其价值为vi,背包的容量是C。问应该如何装入物品,使得装入背包的物品的总价值最大?例如:C=50物品123重量302525价值704060这是一个典
2014-04-03 15:51:34
580
原创 重新开始战斗17-编程之美-八皇后问题
申明:八皇后问题没有被《编程之美》收录,和《重新开始战斗16-编程之美-判断链表是否有环》一样,笔者也在面试时多次遇到这样的问题,因此在这里和大家分享。八皇后游戏的说明:问题的提出:八皇后是个古老而有趣的游戏,是由高斯于1850年首先提出的。要求在国际象棋的棋盘上放置八个皇后,使其不能相互攻击,即任意两个皇后不能处于棋盘的同一行、同一列和同一条对角线上。试问有多少种放法?对于这个问
2014-04-03 14:46:28
597
原创 重新开始战斗16-编程之美-判断链表是否有环
申明:这个题目并不是编程之美收录的题目,但是笔者在面试过程中,遇到过至少两次,其中一次就是创新工场。因此,笔者感觉有必要在这里和大家分享一下这个题目。 问题描述:一个链表(只有next和data两个域),判断其是否存在环。(环入口可能存在任何位置,并不是只有头结点)。如果存在环,并求解环的入口位置。 问题一:对于问题一,在面试创新工场的时候,由于笔者自己实力有限,并没有
2014-04-03 13:57:25
446
原创 重新开始战斗15-编程之美-求数组的子数组之和的最大值
问题描述:一个有N个整数元素的一维数组(A[0],A[1],…,A[n-2],A[n-1]),这个数组当然有很多子数组,那么子数组之和的最大值是什么呢? 解法一:最笨的方法谁都可以想到,枚举所有的子数组之和,找出最大值,代码如下:Int MaxSum(int* A,int n){ Intmaximum = -INF; Intsum;
2014-04-02 14:08:14
429
原创 重新开始战斗14-编程之美-求一个数组中第二大的数
其实这个问题是编程之美2.10问题的一个扩展问题。先看看原问题,同时求一个数组中最大和最小数。 分析与解法一:依次遍历数组,同时不断用较大的数替换max,较小的数替换min,这样O(n)就可以得到最大和最小数。 分析与解法二:对数组排序,第一个数则是最小数,最后一个数则是最大数。排序的时间复杂度为O(nlogn)。但是这样的结果是破坏了原数组,如果要求不能破坏以前的数组,则
2014-03-26 10:38:02
526
原创 重新开始战斗13-编程之美-最大公约数问题
问题描述:求两个整数的最大公约数,如果这两个数很大,算法该如何改分析与解法一:欧几里得算法——辗转相除,这是很经典的求最大公约数问题,其原理描述如下:两个数x,y,x>y,则x=ky+b,如果一个数m能整除x与y,即x/m没有余数,y/m没有余数,则x/m=ky/m+b/m,所以,b/m是没有余数的,这说明x,y若能被m整除,则y,b也能被m整除,这就是辗转的原理。
2014-03-26 10:00:36
406
原创 重现开始战斗12-编程之美-找符合条件的整数
问题描述:任意给定一个正整数N,求一个最小的正整数M(M>1),使得N*M的十进制表示形式里只含有1和0. 分析与解法一:最简单的方法就是从2开始,依次遍历M,直到找N*M中只含1和0位置,这种方法很不好,例如N=99时,M=1122334455667789,N*M=111111111111111111.这个所花费的时间显然是我们不希望看到的。 分析与解法二:对于遍历M
2014-03-26 09:50:28
453
原创 重新开始战斗11-编程之美-精确表达浮点数
问题描述:给定一个有限小数或无限循环小数,能否以分母最小的分数形式来返回这个小数。问题分析:在进行分析之前,先谈谈对这个题的思考方式。如何表示一个有限小数或无限循环小数,首先,无限循环小数的表达一定比有限小数更加复杂,所以应该从有限小数入手。其次,用分母最小的分数形式表示,如果没有这个限制条件,那么问题的求解也应该会变得简单。因此在解决这个问题的时候,应该从简到难。
2014-03-26 09:28:52
392
原创 重新开始战斗10-编程之美-寻找发帖水王
n问题描述:给定一个论坛所有帖子的列表,其中帖子作者的id也在列表中,水王的发帖数目超过了所有帖子的半,请设计算法,找出水王! 问题分析:该问题很直接,简化一下,就是找一个数组中,出现次数最多的数,其中,这个出现次数最多的数的出现次数占整个数组大小>50%。最直观的方法是对数组进行排序,然后遍历,即可找出出现次数最多的数。总的时间复杂度为NlogN+N。那么能不能不进行排序
2014-03-26 09:22:14
599
原创 重新开始战斗09-编程之美-阶乘问题
问题描述:1、 给定一个整数N,那么N的阶乘N!末尾有多少个0。例如,5!=120,末尾有一个0;2、 求N!的二进制表示中最低位1的位置。 问题一分析:假设N!的末尾有m个0,则N!=X*10m,又因为10 =2*5,因此,如果N!中有m个0,那么这N!=X*2m*5m,也就是说,对这N个数进行2与5的分解(将一个数尽量分解为2的幂和5的幂,例如12=22*3,20=22
2014-03-25 19:19:58
423
原创 重新开始战斗08-编程之美-求二进制数中1的个数
问题描述:求二进制数中1 的个数,这个问题看似很简单,例如我们可以用不断除2(右移)来解决,这里讨论这个问题的原因在于说明其一种比较巧妙的解法(这种解法在程序员面试宝典也出现过) 代码如下:Int Count(BYTE v){ Intnum = 0; While(v) { V&=
2014-03-25 14:39:42
440
原创 重新开始战斗07-编程之美-高效见面会
问题描述:某一天,在微软亚洲研究院有N个面试要进行,它们的时间分别为(B[i], E[i])(B[i]为面试开始时间,E[i]为面试结束时间)。假设一个面试者一天只参加一个面试。为了给面试者提供一个安静便于发挥的环境,我们希望将这N个面试安排在若干个面试点。不同的面试在同一个时间不能被安排在同一个面试点。如果你是微软亚洲研究院的HR,现在给定这N个面试的时间之后,你能计算出至少需要多少个面试点吗?
2014-03-25 09:50:17
488
原创 重新开始战斗06-编程之美-电梯调度问题
问题描述:一座不高的楼里有一部电梯,为了解决电梯拥挤的问题,电梯的设计者规定每次电梯从一层往上走时,只允许电梯停在其中的某一层。所有的乘客都从一楼上电梯,到达某层楼后,电梯停下来,所有乘客再从这里爬楼梯道自己的目的层。在一楼的时候,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。学模型:设floor[i]表示第i层要去的人数。target为电梯应该停下的层数。那么该问题的
2014-03-25 09:42:37
540
原创 重新开始战斗05-编程之美-光影切割
问题描述:假设有一个矩形区域,有若干条直线切割该区域,并且没有一条直线与Y轴平行,且不存在三条(以及3条以上)切割线相交于一点的情况。请问该矩形平面被分割成多少块。分析:假设一块矩形区域已经被切割成很多块,那么此时再增加一条切割线,新的切割线与其他切割线相交,且有m个交点。那么新的切割线被分割成m+1段,每一段都会将原来的一块子区域分成两块,即总的会增加m+1块新区域。
2014-03-20 17:02:11
582
原创 重新开始战斗04-编程之美-寻找ID问题
问题描述:一个很大的列表(有10亿多个数),这个列表中全是都是ID号,正常状态下每个ID都会再列表中出现两次(都是乱序)1. 当有一个ID号丢失时,如何找到这个ID号;2. 当有两个ID号丢失时,如何找到这两个ID号。 解法一(最直观)申请一个数组,这个数组和ID列表一样大,然后遍历ID列表,每遍历一个ID号就在数组[ID]加1,最后遍历数组,找到数目为
2014-03-20 16:22:36
464
原创 重新开始战斗03-编程之美-买书问题
问题描述:由于《哈利波特》系列相当畅销,店长决定通过促销活动来回馈读者。上柜的《哈利波特》瓶装本系列中,一共有5卷。假设每一卷单独销售均需8欧元。如果读者一次购买不同的两卷,就可以扣除5%的费用,三卷更多。具体的折扣如下: 本数 折扣 2 5% 3
2014-03-20 15:40:26
376
原创 重新开始战斗02-编程之美-烧饼问题
警告:要看懂本文所讲述的内容,必须建立在仔细阅读原文的基础上。原文有些代码的说明并不是很明确,笔者在本文中,只是针对自己开始不理解的地方经过思考和查阅其他资料后给出了自己的理解。其次,本文没有给出完整代码,完整代码有些长,需要查阅的朋友可以看编程之美1.3节。原文描述:假设有n块大小不一的烙饼,那最少要翻几次,才能达到大小有序的结果?你能否写出一个程序,对于n块大小不一的烙饼,输出
2014-03-19 16:42:51
1151
原创 重新开始战斗01-编程之美-象棋问题
问题描述:象棋中“将”与“帅”是不能相遇的,而且将帅都是在9宫格内移动,还不能对角线移动。九宫格如下,并编号:123456789编写程序,输出“将”“帅”的所有合法位置,要求在代码中只能使用一个自己存
2014-03-19 15:50:17
479
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人