【校招VIP】[整理]常见的算法(智力)题

02月07日 收藏 0 评论 0 前端开发

【校招VIP】[整理]常见的算法(智力)题

转载声明:文章来源https://blog.csdn.net/fuqunxing/article/details/5633464

下面的题目都来源于网上。我把它们整理一下,或者给出解答,做为这段时间学习的记录。

1. Catalan数(n个节点的二叉树有多少个, n个元素的进栈出栈序列有多少个) 12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?

2. 给定一个十进制正整数N,写下从1开始,到N的所有整数,然后数一下其中出现的所有“1”的个数。

0-9: 1

10-99:N(10-19) + 8*N(20-99) = 10 + N(0-99) + 8*N(0-9) = 10+9*N(0-9)

100 - 999: N(100-199) + N(200-999) = 100 + N(0-99) + 8* N(0-99) = 100 + 9*N(0-99)

1000 - 9999: N(1000-1999) + N(2000-9999) = 1000 + N(0-999) + 8*N(0-999) = 1000 + 9*N(0-999)

比如:

N(0-1300) = N(0-999) + N(1000-1300) = N(0-99) + 1000 + N(0-300)

N(0-300) = N(0-199) + N(200 - 300) = N(0-199) + N(200 - 299) = N(0-199) + N(0-99)

总之,要把范围缩小,并且把首位的1拿掉,减小数字范围,这样就可以递归了。

3. 数组循环移位: 设计一个算法,把一个含有N个元素的数组循环右移K位,要求时间复杂度为O(N),且只允许使用两个附加变量.

[1,2, ..... n] = >[n-m+1, n-m+2, .... n, 1, 2, 3,...., n-m]

分3步:[1, 2, 3, ...., n] => [n, n-1, ...n-m+1, n-m, 2, 1]

[n, n-1, ...n-m+1, n-m, ..., 2, 1]=> [n-m+1, n-m+2, .... n, n-m, ..., 2, 1]

[n-m+1, n-m+2, .... n, n-m, ..., 2, 1] =>[n-m+1, n-m+2, .... n, 1, 2, 3,...., n-m]

4. 兄弟争财产:

妈妈有2000元,要分给她的2个孩子。由哥哥先提出分钱的方式,如果弟弟同意,那么就这么分。但如果弟弟不同意,妈妈会没收1000元,由弟弟提出剩下1000元的分钱方式,这时如果哥哥同意了,就分掉这剩下的1000元。但如果哥哥也不同意,妈妈会把剩下的1000元也拿走,然后分别只给他们每人100元。问:如果你是哥哥,你会提出什么样的分钱方式,使你有可能得到最多的钱?(最小单位1元)。

哥哥1100,弟弟900. 如果弟弟不同意,再分1000,弟弟最多是899(哥哥101). 否则哥哥不同意,大家都只有100

5. 有3个红色球,2个白色球,1个绿色球。取出2个不同颜色的球就能变成2个第三种颜色的球(比如:取出1红球,1白球,就能变成2个绿球)。问,最少几次变化能将所有的球都变成同一颜色,说明步骤和原因。

还没有想出来,感觉是无解。

[3R, 2W, 1G] => [5R, 1W] OR [2R, 4W] OR [2R, 1W, 3G]

6. 找符合条件的整数:任意给定一个正整数N,求一个最小的正整数M(M >1),使得N * M的十进制表示形式里只含有1和0。

野蛮暴力法:穷举,有一个问题,如果M不存在,那不是死循环了?

构造M: 先算个位,再算十位,一直递归。。。如N=31, 那么M的个位一定是1或者0,再看十位。。。。。这样,M的确可以算出来,但是怎么判断M是不是最小呢,或者如果M不存在,怎么办?

C 0条回复 评论

帖子还没人回复快来抢沙发